jQuery теперь позволяет использовать live для обработки пользовательских событий, что я использовал в своем последнем проекте и нашел очень удобным. Однако я столкнулся с ограничением/ошибкой, что я надеюсь, что кто-то сможет мне помочь.Могу ли я получить пригодные для использования данные в обработчике jQuery live для пользовательского события?
Когда вы вызываете событие, вы можете передать дополнительный массив данных тоже, как это:
$(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>
Это потрясающе, это работает как шарм. Большое спасибо! –