2009-12-18 30 views
138

Tôi đang cố gắng để thay đổi hình thức hành động dựa trên giá trị được lựa chọn từ một menu thả xuống ...javascript - thay đổi hành động biểu mẫu dựa trên lựa chọn?

Về cơ bản, html trông như thế này:

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

Nếu "người" được chọn, (theo mặc định), hành động phải là "/ tìm kiếm/người dùng" và nếu nội dung được chọn, hành động phải là "/ search/content"

Tôi vẫn đang tìm kiếm, nhưng chưa có thể tìm hiểu cách thực hiện điều này ...

Trả lời

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

Đó là cách tốt hơn so với những gì tôi đã cố gắng ... Cảm ơn bạn – n00b0101

+1

Làm việc hoàn hảo. Cảm ơn. Tôi đã cập nhật mã này để thay đổi hành động khi gửi thay vì thay đổi biểu mẫu. – Ryan

+0

Rất tốt! Nó đã giúp rất nhiều! – Alex

-14

Yêu cầu bạn có biểu mẫu?
Nếu không, sau đó bạn có thể sử dụng này:

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

với JavaScript sau:

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

this.form.submit(); sẽ không có ý nghĩa vì thực tế không có hình thức nào - không có gì để nộp – SET

22

Nếu bạn chỉ muốn thay đổi hình thức hành động, tôi thích thay đổi hành động trên hình thức đăng, chứ không phải hơn thay đổi trên đầu vào. Nó chỉ cháy một lần.

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

Nó tốt hơn để sử dụng

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

hơn

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

Vì vậy, dựa trên câu trả lời trante của chúng ta có:

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

Sử dụng setAttribute có thể giúp bạn tiết kiệm rất nhiều thời gian có khả năng.

Các vấn đề liên quan