2009-12-18 3 views
138

Я пытаюсь изменить действие формы на основе выбранного значения из выпадающего меню ...javascript - изменить форму действия на основе выбора?

В принципе, HTML выглядит следующим образом:

<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> 

Если «люди» выбран, (которое по умолчанию), действие должно быть «/ search/user», и если контент выбран, действие должно быть «/ search/content»

Я все еще ищу, но не был в состоянии узнать, как это сделать ...

ответ

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

Это лучше, чем то, что я пытался ... Спасибо – n00b0101

+1

Работал идеально. Благодарю. Я обновил этот код, чтобы изменить действие на submit вместо изменения формы. – Ryan

+0

Очень хорошо! Это очень помогло! – Alex

-14

Требуется, чтобы у вас была форма?
Если нет, то вы могли бы использовать это:

<div> 
    <input type="hidden" value="ServletParameter" /> 
    <input type="button" id="callJavaScriptServlet" onclick="callJavaScriptServlet()" /> 
</div> 

со следующим JavaScript:

function callJavaScriptServlet() { 
    this.form.action = "MyServlet"; 
    this.form.submit(); 
} 
+14

this.form.submit(); не будет иметь никакого смысла, поскольку на самом деле нет никаких форм - ничего не представлять – SET

22

Если вы хотите изменить действие формы, я предпочитаю изменение действия на форме подати, а чем на входе-изменении. Он срабатывает только один раз.

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

Это лучше использовать

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

вместо

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

Так, на основании ответа trante имеем::

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

Использование setAttribute может сэкономить много времени.

Смежные вопросы