JavaScript: làm thế nào để thay đổi giá trị thuộc tính hành động dựa trên lựa chọn?


151

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

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 sẽ là "/ search / user" và nếu nội dung được chọn, hành động sẽ là "/ search / content"

Tôi vẫn đang tìm kiếm xung quanh, nhưng không thể tìm ra cách để làm điều này.

Câu trả lời:


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

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

1
Nếu bạn thiết kế cho thiết bị di động, tốt hơn là thay đổi hành động "khi gửi" cho các vấn đề về hiệu suất. Kiểm tra câu trả lời của tôi dưới đây.
trante

Sử dụng propthay vì attr. Ví dụ =$("#search-form").prop ("action", "/search/" + action);
gsinha

25

Nếu bạn chỉ muốn thay đổi hành động của biểu mẫu, tôi thích thay đổi hành động trên biểu mẫu gửi hơn là thay đổi trên đầu vào. Nó chỉ bắn một lần.

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

0

Sử dụng tốt hơn

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

thay vì

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

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

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

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


Tại sao DOMEuity setAttributetiết kiệm bất kỳ thời gian nào khi sử dụng jquery attr?
enorl76

0

Đơn giản và dễ dàng trong javascipt

<script>

  document.getElementById("selectsearch").addEventListener("change", function(){

  var get_form =   document.getElementById("search-form") // get form 
  get_form.action =  '/search/' +  this.value; // assign value 

});

</script>

-16

Được yêu cầu rằng bạn có một hình thức?
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();
}

15
this .form.submit (); sẽ không có ý nghĩa vì thực tế không có mẫu nào như vậy - không có gì để gửi
TẬP
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.