2013-07-23 39 views
9

Tôi có đầu vào select2 mà tôi đang sử dụng và vào 'thay đổi', tôi lấy các giá trị và thực hiện một hành động. Tôi đang cố gắng để xóa rằng select2 mà không kích hoạt một sự kiện thay đổi. Điều này có thể không?Xóa select2 mà không kích hoạt sự kiện thay đổi

Để xóa Select2 Tôi đang sử dụng đoạn mã sau:

$docInput.select2('data', null); 

này xóa đầu vào như mong muốn, mà còn gây ra một sự kiện thay đổi mà chạy qua mã khác của tôi. Phải có một cách để làm im lặng cò súng. Ý tưởng nào?

+1

Bạn có thể làm một thử nghiệm trong sự kiện onchange của bạn và chắc chắn rằng đầu vào không trống trước khi bạn làm bất cứ điều gì bạn đang làm trong chức năng đó. – Jnatalzia

+0

Bạn có thể cung cấp [jsfiddle] (http://jsfiddle.net) về những gì bạn đang có? – Dom

+0

@Jnatalzia Tôi hiện đang sử dụng ý tưởng của bạn là 'khắc phục' nhưng tôi tò mò nếu xóa lựa chọn 2 mà không kích hoạt sự kiện thay đổi thực sự có thể xảy ra. Cảm ơn ý tưởng. –

Trả lời

13

Tôi tin rằng tất cả các bạn cần là:

$docInput.select2('data', null, false);

+3

+1 - có hoạt động ... http://jsfiddle.net/dirtyd77/MhUK7/1/ – Dom

+0

Có điều này nên làm như một sửa chữa tạm thời, tôi sẽ mở một vấn đề/PR sau ngày hôm nay. –

+0

Cảm ơn mọi người vì đã dành thời gian của bạn. Tôi đánh giá cao sự giúp đỡ. –

37

Bạn có thể sử dụng sau đây với Select2 4.x

$docInput.val(null).trigger('change.select2'); 
+0

Đây có phải là cách duy nhất bạn có thể tìm thấy không? –

+0

Có. Nó hoạt động tốt. –

+0

Điều này làm việc vì nó kích hoạt cụ thể sự kiện 'change' với vùng tên mà Select2 đang tìm kiếm (' .select2'), do đó các trình xử lý sự kiện khác sẽ không được kích hoạt. Không gian tên _might_ này thay đổi trong tương lai, nhưng nó không chắc. –

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