2013-04-19 4 views
0

У меня есть две системы, одна из которых использует Dojo и другую jQuery. Я должен установить связь между ними, но у меня возникла проблема.Почему dojo.connect не запускается после запуска jQuery?

jQuery eventlistener запускается после триггера jQuery. Слушатель событий Dojo не запускается. Почему это происходит?

Я создал минимальную среду из моей текущей задачи: http://jsfiddle.net/vEkt6/

HTML:

<input type="text" value="0" name="a" id="a" /> 

JS:

var el = dojo.byId('a'); 
dojo.connect(el, 'change', function(){ 
    console.log('dojo'); 
}); 

jQuery(el).on('change', function(){ 
    console.log('jquery'); 
}); 

jQuery(el).val(1).trigger('change'); 
+0

http://blog.fgribreau.com/2010/08/jquery-fireevent-plugin-for-firing -real.html и https://github.com/FGRibreau/jQuery-plugin-fireEvent. –

ответ

2

привязка события JQuery сложны, в основном это связывает его с addEventListener (или аналогичный) и прикрепляет дополнительную информацию к контейнеру данных элемента. Поэтому он не может использоваться через чистые js позже. триггер работает аналогичным образом - он не будет инициировать событие, связанное с додзё. Додзе также делает некоторые трюки. Подводя итог, обе структуры используют dom level 2 для присоединения событий, поэтому вы не можете просто вызвать el.onchange(), это будет null. Тем не менее, существует широко известная часть чистого кода, который будет делать трюк:

var el = dojo.byId('a'); 
dojo.connect(el, 'change', function(){ 
    console.log('dojo'); 
}); 

jQuery(el).on('change', function(){ 
    console.log('jquery'); 
}); 

jQuery(el).val(1); 

if ("fireEvent" in el) { 
    el.fireEvent("onchange"); 
} else { 
    var evt = document.createEvent("HTMLEvents"); 
    evt.initEvent("change", false, true); 
    el.dispatchEvent(evt); 
}; 

Your modified demo

+0

Спасибо! Я использовал этот кусок кода (почти такой же, у меня есть резервные копии IE) тоже в кодах Dojo для триггера, но я думал, что метод триггера jQuery делает то же самое (мой плохой, что я не проверял основной код jQuery) , Но похоже, что вы правы, я должен использовать этот ... –

Смежные вопросы