2011-03-16 25 views
0

我試圖檢測「選擇列表」中的「更改」事件,就像從「鼠標單擊」或從「標籤按下(即焦點丟失)「。此後,我想根據這兩項行動做不同的事情。從選擇列表中檢測「更改」事件 - 從鼠標單擊或按鍵中輸入

在深度,如下:

我有一個錶行一個「選擇列表」。每當用戶從該列表中選擇一個項目時,一些控件(輸入,選擇等等)動態加載到緊鄰的下一個表格行內的所述「選擇列表」下方。

我想從這裏得到的是,如果用戶通過鍵盤從「選擇列表」中選擇了一些項目並按下標籤,則焦點應自動轉移到動態呈現的第一個控件。同樣,如果用戶使用鼠標從「選擇列表」中選擇一個項目,焦點不應該移動到任何地方。

下面是我的代碼來實現相同的:

$("#mySelectList").bind("change", function (e) { 

var selList = $(this); 

$.post("/someController/someAction", { paramOne: $(this).val() }, function (result) { 

    // ..... // 
    // consume "result" and load dynamic controls underneath the "select list" 
    selList.closest('tr').next().find("input, select:first-child").focus(); // set focus to the next immediate control 

}, 'json'); 

}); 

從上面的,一切工作正常,而使用「標籤」,但如果用戶使用鼠標選擇時,焦點仍然移動到下一個動態控制這是不好的。如果用戶使用鼠標選擇一個項目,我只想保持焦點只在「選擇列表」上。

我也嘗試使用「keyup」來代替「更改」,但導致「選擇列表」,以便通過控件導航時使用「選項卡選項卡」選項卡或者在使用「選項卡選項卡選項卡」時發出不必要的ajax請求方面問題的ajax請求「製表符移動+製表符選項卡等」。

請讓我知道如果你們知道更好的方法來實現這種情況。我也期待在每個現有瀏覽器下運行一個可能的解決方案。

期待您的回覆。

在此先感謝。

+0

'blur'?如果有人按下標籤,焦點應自動從元素中移除。如果用戶點擊,焦點停留。因此,要檢測「標籤按」,「模糊」似乎是要走的路。 –

+0

@Felix:謝謝你的回覆。 '模糊'似乎是一種方式。但不幸的是,'模糊'抑制了'變化'事件,最終也終止了任何Ajax請求。請任何其他想法? – Gurdeep

+0

在那裏,我想,必須有助於區分變化行爲是來自「點擊鼠標」還是來自「失去焦點」。任何人? – Gurdeep

回答

1

不知道我確切地理解,但是這樣的事情呢?

var curFocus; 

$("body *").focus(function(){ curFocus = $(this); }); 

$("#mySelectList").change(function(){ 
    var selList = $(this); 

    if(curFocus[0] != selList[0]){ 
     $("#myOtherSelect").focus(); 
    } 
}); 
+0

你,先生,是救主!這工作,很多謝謝! – Gurdeep

相關問題