2009-10-01 64 views
3

jQuery現在允許您使用live來處理自定義事件,這是我在我的最新項目中使用的,並且非常方便。但是,我已經提出了一個限制/錯誤,我希望有人能夠幫助我。我可以在自定義事件的jQuery實時處理程序中獲取可用數據嗎?

當你觸發一個事件,你可以傳遞數據的其他陣列也是如此,像這樣:

$(this).trigger('custom', ['foo', 'bar' ]); 

如果你只是使用bind,你可以完全訪問這些變量。但是,如果您使用的是直播,事實證明您無法獲取數據,據我所知。我錯了嗎?有另一種方法嗎?

下面是一些演示代碼來說明:

$().ready(function() { 

    $('button').click(function(){ 
     $('<li>Totally new one</li>').appendTo('ul'); 
    }); 

    $('li').bind('custom', function(e, data) { 
     // this one works fine for old elements, but not for new ones 
     $('#output1').text('Bind custom from #' + e.target.id + '; ' + data); 
    }).live('custom', function(e, data) { 
     // this one triggers for old and new elements, but data is useless 
     $('#output2').text('Live custom from #' + e.target.id + '; ' + data); 
    }).live('click', function(){ 
     $('div').text(''); 
     // just using click count to illustrate passing data in the trigger 
     var clicks = $(this).data('clicks'); 
     if(typeof clicks == 'undefined') clicks = 1; 
     $(this).trigger('custom', ['Times clicked: ' + clicks ]).data('clicks', clicks + 1); 
    }); 
}); 

和相關的HTML:

<button>Add</button> 
<ul> 
    <li id="one">First Item</li> 
    <li id="two">Second Item</li> 
    <li id="three">Third Item</li> 
</ul> 
<div id="output1">Result 1</div> 
<div id="output2">Result 2</div> 

回答

2

它看起來像最簡單的方法可能是用在最後的「備用」中描述的格式例如http://docs.jquery.com/Events/trigger#eventdata。該示例使用對象字面值來指定事件對象,您可以在其中創建自定義屬性。我也試過你上面描述的方法無濟於事,但替代格式適用於我。因此,而不是調用

$(this).trigger('custom', ['Times clicked: ' + clicks ]) 

嘗試

$(this).trigger({type:'custom', clicks: clicks}); 

,然後通過引用它在你的 「自定義」 事件的事件處理程序:

"Times clicked: " + e.clicks; 

希望幫助!

+0

這真棒,它像一個魅力。非常感謝你! – 2009-10-02 15:33:39

相關問題