it-swarm.com.de

JavaScript: Wie ändere ich den Attributwert einer Formularaktion basierend auf der Auswahl?

Ich versuche, die Formularaktion basierend auf dem ausgewählten Wert aus einem Dropdown-Menü zu ändern.

Grundsätzlich sieht das HTML so aus:

<form class="search-form" id="search-form" method="post" accept-charset="UTF-8" action="/search/user">
<select id="selectsearch" class="form-select" name="selectsearch">
<option value="people">Search people</option>
<option value="node">Search content</option>
</select>

<label>Enter your keywords: </label>
 <input type="text" class="form-text" value="" size="40" id="edit-keys" name="keys" maxlength="255" />

<input type="submit" class="form-submit" value="Search" id="edit-submit" name="search"/>
</form>

Wenn "Personen" ausgewählt ist (was standardmäßig der Fall ist), sollte die Aktion "/ search/user" lauten. Wenn Inhalt ausgewählt ist, sollte die Aktion "/ search/content" lauten.

Ich bin immer noch auf der Suche, habe aber noch nicht herausgefunden, wie das geht.

151
n00b0101
$("#selectsearch").change(function() {
  var action = $(this).val() == "people" ? "user" : "content";
  $("#search-form").attr("action", "/search/" + action);
});
277
cletus

Wenn Sie nur die Aktion des Formulars ändern möchten, ziehe ich es vor, die Aktion beim Absenden des Formulars zu ändern, anstatt beim Ändern der Eingabe. Es wird nur einmal abgefeuert.

$('#search-form').submit(function(){
  var formAction = $("#selectsearch").val() == "people" ? "user" : "content";
  $("#search-form").attr("action", "/search/" + formAction);
}); 
23
trante

Es ist besser zu benutzen

$('#search-form').setAttribute('action', '/controllerName/actionName');

eher, als

$('#search-form').attr('action', '/controllerName/actionName');

Basierend auf der Antwort von Trante haben wir also:

$('#search-form').submit(function() {
    var formAction = $("#selectsearch").val() == "people" ? "user" : "content";
    $("#search-form").setAttribute("action", "/search/" + formAction);
}); 

Durch die Verwendung von setAttribute können Sie möglicherweise viel Zeit sparen.