2011-03-19 17 views
23

Mi código actual es la siguiente:Cómo utilizar JavaScript para cambiar la forma de acción

<div class="fr_search"> 
    <form action="/" accept-charset="UTF-8" method="post" id="search-theme-form"> 
    ....... 
    </form> 
</div> 

Ahora quiero escribir una función para cambiar la acción de la forma y método, cuando se cumple una condición. ¿Cómo escribo este código?

Por ejemplo,

function test() { 
    if (selectedIndex === 1).... 
} // How do I write this code? 

Respuesta

26
function chgAction(action_name) 
{ 
    if(action_name=="aaa") { 
     document.search-theme-form.action = "/AAA"; 
    } 
    else if(action_name=="bbb") { 
     document.search-theme-form.action = "/BBB"; 
    } 
    else if(action_name=="ccc") { 
     document.search-theme-form.action = "/CCC"; 
    } 
} 

y su formulario necesita tener name es este caso

<form action="/" accept-charset="UTF-8" method="post" name="search-theme-form" id="search-theme-form"> 
+4

Creo que quieres decir 'document ['search-theme-form']', 'document.search -theme-form' en realidad no funciona. –

+0

Es posible que necesite definir el nombre del formulario sin guiones – hop

1

Si estás usando jQuery, es tan simple como esto:

$('form').attr('action', 'myNewActionTarget.html'); 
+5

Tenga en cuenta que esto cambiará todos los formularios de la página. – labue

+0

si quiero usar jquery, cómo escribir el código que no cambia otras formas. – enjoylife

+7

@enjoylife '$ ('# myFormId'). Attr ('acción', 'myNewActionTarget.html');' –

19

Prueba esto:

var frm = document.getElementById('search-theme-form') || null; 
if(frm) { 
    frm.action = 'whatever_you_need.ext' 
} 
3

Quería usar Javascript cambiar la acción de un formulario, por lo que podría tener diferentes entradas de envío dentro del mismo formulario que enlaza a diferentes páginas. También tuve la complicación adicional de usar la reescritura de Apache para cambiar example.com/page-name en example.com/index.pl?page=page-name. Descubrí que cambiar la acción del formulario provocó que se procesara example.com/index.pl (sin parámetro de página), aunque se visualizara la URL esperada (example.com/page-name) en la barra de direcciones. Para evitar esto, utilicé Javascript para insertar un campo oculto para establecer el parámetro de página. Todavía cambié la acción del formulario, solo para que la barra de direcciones mostrara la URL correcta.

function setAction (element, page) 
{ 
    if(checkCondition(page)) 
    { 
    /* Insert a hidden input into the form to set the page as a parameter. 
    */ 
    var input = document.createElement("input"); 
    input.setAttribute("type","hidden"); 
    input.setAttribute("name","page"); 
    input.setAttribute("value",page); 
    element.form.appendChild(input); 

    /* Change the form's action. This doesn't chage which page is displayed, 
    * it just make the URL look right. 
    */ 
    element.form.action = '/' + page; 
    element.form.submit(); 
    } 
} 

En la forma:

<input type="submit" onclick='setAction(this,"my-page")' value="Click Me!" /> 

Éstos son mis Apache reescribir reglas:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f 
RewriteRule ^/(.*)$ %{DOCUMENT_ROOT}/index.pl?page=$1&%{QUERY_STRING} 

estaría interesado en alguna explicación de por qué sólo la creación de la acción no lo hizo trabajo.

1
// i assume that you want to change form action based on drop-down choice 
function change_action(form1){ 
if(form1.mydropdown_name.selectedIndex===1){ 
    form1.action = "aaaa.php"; 
}else{ 
     form1.action = "bbbb.php"; 
    } 
} 

//how to use 
<select name='mydropdown_name' id='mydropdown_id' onchange="change_action(this.form)"><option value="1">first</option><option value="2">second</option></select> 
//this way you do not have to provide js function with form name. 
Cuestiones relacionadas