web-dev-qa-db-fra.com

Comment utiliser JavaScript pour changer l'action du formulaire

Mon code actuel est le suivant:

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

Maintenant, je veux écrire une fonction pour changer l'action de formulaire et la méthode, lorsqu'une condition est remplie. Comment puis-je écrire ce code?

Par exemple,

function test() {
   if (selectedIndex === 1)....
} // How do I write this code?
32
enjoylife
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";
    }
}

et votre formulaire doit avoir name est ce cas

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

Essaye ça:

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

Si vous utilisez jQuery, c'est aussi simple que cela:

$('form').attr('action', 'myNewActionTarget.html');
3
Tejs

Je voulais utiliser Javascript pour changer l'action d'un formulaire, afin que je puisse avoir différentes entrées d'envoi dans le même formulaire, reliant différentes pages. J'ai également eu la complication supplémentaire d'utiliser Apache rewrite pour changer example.com/page-name En example.com/index.pl?page=page-name. J'ai constaté que la modification de l'action du formulaire entraînait le rendu de example.com/index.pl (Sans paramètre de page), même si l'URL attendue (example.com/page-name) Était affichée dans la barre d'adresse. Pour résoudre ce problème, j'ai utilisé Javascript pour insérer un champ masqué afin de définir le paramètre de page. J'ai quand même changé l'action du formulaire, juste pour que la barre d'adresse affiche l'URL correcte.

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(); 
  }
} 

Sous la forme:

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

Voici mes règles de réécriture Apache:

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

Je serais intéressé par toute explication sur la raison pour laquelle le réglage de l'action n'a pas fonctionné.

3
Waz
 // 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.
0
ashraf mohammed