Sự kiện thay đổi kích hoạt <select> bằng cách sử dụng jquery


145

dù sao tôi cũng có thể kích hoạt một sự kiện thay đổi trên hộp chọn khi tải trang và chọn một tùy chọn cụ thể.

Ngoài ra chức năng được thực hiện bằng cách thêm kích hoạt sau khi ràng buộc chức năng với sự kiện.

Tôi đã cố gắng để sản xuất một cái gì đó như thế này

<select class="check">
<option value="one">one</option>
<option value="two">two</option>
</select>

$(function(){
    $('.check').trigger('change'); //This event will fire the change event. 
    $('.check').change(function(){
      var data= $(this).val();
      alert(data);            
    });
});

http://jsfiddle.net/v7QWd/1/


Bạn có muốn đặt một tùy chọn cụ thể khi tải không? hoặc bạn muốn kích hoạt sự kiện thay đổi của bạn?
Manse

Bạn có thể mở rộng về giải pháp cuối cùng. Bạn đang cố gắng để có một tùy chọn bắt buộc khi tải trang, hoặc chọn một tùy chọn khác khi một cái gì đó cụ thể được chọn?
Matthew Riches

xin chào, cảm ơn phản hồi của bạn tôi đã có thể giải quyết vấn đề và đã ghi lại nó.
kishanio

Câu trả lời:


287

Sử dụng val()để thay đổi giá trị (không phải văn bản) và trigger()để kích hoạt sự kiện theo cách thủ công.

Trình xử lý sự kiện thay đổi phải được khai báo trước khi kích hoạt.

Đây là một mẫu

$('.check').change(function(){
  var data= $(this).val();
  alert(data);            
});

$('.check')
    .val('two')
    .trigger('change');

Ngoài ra sau khi thay đổi tùy chọn, tôi muốn thực hiện chức năng thay đổi sự kiện. WRT này . hộp cảnh báo nên thực hiện.
kishanio

@KishanThobhani bạn nên gọi như vậy sau khi thêm trình xử lý. xem mẫu.
Giuse

7
Phần quan trọng của giải pháp này là: Trình xử lý sự kiện thay đổi PHẢI được khai báo TRƯỚC KHI kích hoạt (có ý nghĩa ...), trong trường hợp của tôi đó là vấn đề, cảm ơn!
Larzan

Nó giúp như là Cứu tinh, Cảm ơn bạn @Joseph
Divya

xác định chức năng thay đổi TRƯỚC KHI bạn đang sử dụng, giải quyết vấn đề của tôi. Cảm ơn.
Kam Meat

27

Để chọn một tùy chọn, sử dụng .val('value-of-the-option')trên phần tử chọn. Để kích hoạt phần tử thay đổi, sử dụng .change()hoặc .trigger('change').

Các vấn đề trong mã của bạn là dấu phẩy thay vì dấu chấm $('.check'),trigger('change');và thực tế là bạn gọi nó trước khi ràng buộc trình xử lý sự kiện.


10
$('#edit_user_details').find('select').trigger('change');

Nó sẽ thay đổi mục thả xuống của thẻ html chọn với id="edit_user_details".


6

Một giải pháp làm việc khác cho những người bị chặn với trình xử lý kích hoạt jQuery, đó là sự cố cháy nổ vào các sự kiện gốc sẽ như dưới đây (hoạt động 100%):

var sortBySelect = document.querySelector("select.your-class"); 
sortBySelect.value = "new value"; 
sortBySelect.dispatchEvent(new Event("change"));

1
Tôi đã thử tất cả các cách trên, nhưng chỉ có điều này làm việc cho tôi. Tôi nghĩ, bởi vì lựa chọn của tôi là bên trong vue. Cảm ơn @ Mohamed23gharbi!
Tillito

1
Tương tự ở đây. Đây là giải pháp tôi đã tìm kiếm trong một giờ. Cảm ơn.
mberna

1
Điều này cần phải là câu trả lời!
MARS

1

Cung cấp liên kết về giá trị của thẻ tùy chọn

<select size="1" name="links" onchange="window.location.href=this.value;">
   <option value="http://www.google.com">Google</option>
   <option value="http://www.yahoo.com">Yahoo</option>
</select>

1

Nếu bạn muốn làm một số kiểm tra thì hãy sử dụng cách này

 <select size="1" name="links" onchange="functionToTriggerClick(this.value)">
    <option value="">Select a Search Engine</option>        
    <option value="http://www.google.com">Google</option>
    <option value="http://www.yahoo.com">Yahoo</option>
</select>

<script>

   function functionToTriggerClick(link) {

     if(link != ''){
        window.location.href=link;
        }
    }  

</script>

0

Dựa trên câu trả lời của Mohamed23gharbi:

function change(selector, value) {
    var sortBySelect = document.querySelector(selector);
    sortBySelect.value = value;
    sortBySelect.dispatchEvent(new Event("change"));
}

function click(selector) {
    var sortBySelect = document.querySelector(selector);
    sortBySelect.dispatchEvent(new Event("click"));
}

function test() {
    change("select#MySelect", 19);
    click("button#MyButton");
    click("a#MyLink");
}

Trong trường hợp của tôi, nơi các yếu tố được tạo bởi vue, đây là cách duy nhất hoạt động.


0

Bạn có thể thử mã dưới đây để giải quyết vấn đề của mình:

Theo mặc định, tùy chọn đầu tiên chọn: jQuery ('. Select'). Find ('tùy chọn') [0] .selected = true;

Cảm ơn, Ketan T

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.