2012-09-13 70 views
0

我有jQuery UI Multiselect Next http://quasipartikel.at/multiselect_next我想在選擇發生任何變化時觸發一個事件。jQuery UI Multiselect Next - onChange - 全部刪除,全部添加

這個例子的工作原理:

<script type="text/javascript"> 

$(function(){ 
$("#countries").multiselect();   
$('#countries').multiselect({ selected: function(event, ui) {change(); } }); 
$('#countries').multiselect({ deselected: function(event, ui) {change(); } }); 
});   

function change(){ 
alert('CHANGE'); 
} 

</script> 

當我從列表中移動元素,功能改變()被調用。 主要問題是當我按下「全部刪除」或「全部添加」時,因爲函數被多次調用(元素數量)。

是否可能調用函數change()只有一次,當我按下「全部刪除」或「全部添加」?

謝謝。

回答

1

我發現瞭解決方案:

打開ui.multiselect.js

添加下列行來全選功能:

this.element.trigger('change');

添加下列行來選擇無功能{

this.element.trigger('change');

添加以下行停止功能

that.element.trigger('change');

HTML:

<script type="text/javascript"> 
    $(function(){  
     $("#countries").multiselect();   
     $('#countries').bind('change', function() {alert('Change'); }); 
     }); 
</script> 
0

我不確定。但你試試jquery.one()

$("#foo").one("click", function() { 
    alert("This will be displayed only once."); 
}); 
+0

很抱歉,但它不工作我 – FeKuLa

+0

是的,我找到[解決方法請參見本編輯](HTTP:// jsfiddle.net/GDuRn/1/)。請告訴我是否正確。 – Sender

+0

它會工作,我會同時測試 – Sender

0

你可以使用某種計時方案來過濾額外的呼叫。讓我們假設一分鐘,一個真正的人類將無法每隔100毫秒觸發一次選定或取消選定的事件。你可以做到以下幾點:

var lastChange = 0; 

function change() { 

    //get current date, then the number of milliseconds since 1/1/1970 
    var curr_date = new Date(); 
    var n = cur_date.getTime(); 

    //compute the difference. 
    var diff = n - lastChange; 

    //update our last change variable. 
    lastChange = n; 

    //if we're within 100 milliseconds of the last call, ignore. 
    if (diff < 100) 
    return; 

    //proceed as normal. 
    alert('change!'); 
} 

你可以調整這樣的算法,以滿足您的需求,我使用100毫秒作爲一個例子。我不確定有一個更乾淨的方法,因爲你基本上是在過濾來自UI控件本身的事件。

+0

隨着你的功能,當我按下「全部刪除」功能被稱爲2次沒有:http:// jsfiddle。net/GDuRn/ – FeKuLa

+0

聽起來像是一個異步問題。您可能需要添加一個信號來防止它運行兩次。再次,不是一個漂亮的解決方案,但它可能會伎倆。 –

+0

你能舉個例子嗎? – FeKuLa