2009-11-29 31 views
1

我使用YUI作爲javascript框架,並且可以在用戶更改基本輸入字段的值時反應良好,反應是發送Ajax查詢。Javascript - 用於多選變更的事件

不過,我沒有這麼幸運多選下拉列表:

  • 聽「變革」將每個用戶增加時送我的查詢/刪除一個項目他的選擇
  • 聽「模糊「要求用戶點擊其他地方爲了放鬆焦點和發送查詢(不是很有用),再加上它會發送查詢,如果用戶只滾動列表而不改變任何東西(無用,混亂)。

任何想法(與YUI),這將使用一個聰明的行爲? 或者我應該真的聽更改並實現超時(在發送查詢之前等待後續更改)?

回答

4

我用的是同一種超時您是否想在關鍵事件,當用戶完成輸入檢測,同樣的方法可以在你的問題中:

// helper function 
var timeout = (function(){ 
    var timer = 0; 
    return function(callback, ms){ 
    clearTimeout (timer); 
    timer = setTimeout(callback, ms); 
    }; 
})(); 

用法:

// YUI 2 
YAHOO.util.Event.addListener(oElement, "change", function() { 
    timeout(function() { 
    // one second since the last selection change 
    }, 1000); 
}); 

// YUI 3 
Y.on("click", function() { 
    timeout(function() { 
    // one second since the last selection change 
    }, 1000); 
}, oElement); 

基本上在此timeout函數,I R如果在之前調用該函數指定的延遲,則設置該定時器。

1

您可以在onChange事件之後運行setTimeout並跟蹤一系列更改以確定自事件發生後是否進行了更改。如果在這段時間內沒有進行任何更改,則可以發送查詢。

例如,像:

var changes = 0; 

function myOnChangeHandler(e) 
{ 
    changes++; 
    var local_change = changes; 

    setTimeout(function() { 
    if (local_change === changes) { 
     sendRequest(); 
    } 
    }, 500); 
}