2013-06-05 54 views
3

我不知道爲什麼blur方法在使用on和選擇器時沒有接收到傳遞的數據。jquery觸發器傳遞的數據沒有通過和模糊

這裏是代碼,只是強調任何輸入,然後按tab,您將看到isTab參數沒有被設置。爲什麼?

小提琴: http://jsfiddle.net/fz5yA/9/

HTML:

<div id="Container"> 
</div> 

的JavaScript:

var Container = $("#Container"); 
Container.on({ 
    keydown : function(e){ 
     var Item = $(this); 

     console.log(e.keyCode); 
     if(e.keyCode == 9) { 
      Item.trigger("blur",[true]); 
      return false; 
     } 
    }, 
    blur : function(e, isTab) 
    { 
     console.log("IsTab:" + isTab); 
    }},".Item"); 

for(var i = 0 ; i < 10 ; i++) 
{ 
    Container.append("<input class='Item'/>"); 
    Container.append("<br/>"); 
} 

回答

1

系統產生blur事件只是有一個參數,而不是兩個。沒有以系統創建該事件的正常方式傳遞給該事件處理程序的參數isTab。你可以在jQuery doc中看到。

如果您將手動觸發的事件的事件名稱更改爲非正常的blur事件,並且修復了在.trigger()中傳遞參數的方式,那麼額外的參數將起作用。更改爲這一點,你會看到額外的參數:

Container.on({ 
    keydown : function(e){ 
     var Item = $(this); 

     console.log(e.keyCode); 
     if(e.keyCode == 9) { 
      console.log("aaa"); 
      Item.trigger("myEvent", true); // Changed event name and fixed the syntax in this line 
      return false; 
     } 
    }, 
    myEvent : function(e, isTab)    // Changed event name here 
    { 
     console.log("IsTab:" + isTab); 
    }},".Item"); 

演示在這裏:http://jsfiddle.net/jfriend00/fz5yA/17/

+0

所以,如果我想要一個額外的參數傳遞給模糊事件,是不可能的? – Fraga

+0

你可以,但不能在keydown事件中出現。 http://jsfiddle.net/fz5yA/19/我不完全理解*爲什麼*部分呢。如果您一起刪除觸發器代碼,blur事件不會被觸發,導致我期望參數被傳遞,但事實並非如此。事件代表團與這個問題也沒有任何關係。 –

+0

這真的很奇怪!! ......這個觸發器在關鍵事件中完美無缺......但是爲什麼?是相同的代碼並且工作方式不同。你知道爲什麼嗎? – Fraga