2010-09-27 1 views
1

У меня есть набор флажков, которые добавляются в документ через Ajax называютДобавить прослушиватель событий к объекту, который добавляется к DOM с помощью AJAX

<input type='checkbox' checked class='import'> 
<input type='checkbox' checked class='import'> 
<input type='checkbox' checked class='import'> 
<input type='checkbox' checked class='import'> 
<input type='checkbox' checked class='import'> 

У меня есть несколько бит из JavaScript (с помощью прототипа)

function check_toggle(obj, e) { 
    if (e.shiftKey) {obj.checked=!obj.checked;} 
    else if (e.altKey) {obj.checked=true;} 
    else if (e.ctrlKey) {obj.checked=false;} 
} 
$$('.import').each(function(obj){ 
    Event.observe(obj, "mouseover", function(e){alert('here');}.bind(this)) 
}); 

Теперь, если флажки на странице на странице загрузки, то mousover трюк работает.

К сожалению, если я попытаюсь вызвать метод «$$» каким-либо образом ПОСЛЕ того, как флажки были добавлены в DOM через AJAX, ни один из них не сможет забрать свой прослушиватель событий.

SO ... кто-нибудь знает, как заставить прототип перечитать текущее состояние DOM? (или любое другое обходное решение, о котором вы можете подумать)

Я попытался поместить функцию $$ в функцию и называть ее частью функции обратного вызова onSuccess в качестве отдельной функции после того, как вызов ajax был выполнен и вывод целую функцию $$ как часть фактических значений AJAX. Все безрезультатно.

справка приветствуется.

ответ

0

было на самом деле смешно легко.

function ajax_load_keyset(obj) { 
    url    = '/myurl.html'; 
    params   = 'id='+obj.value; 
    new Ajax.Updater( 'checks_go_here', 
        url, { 
        method:'post', 
        parameters:params, 
        evalScripts: true, // this line must be present 
        onSuccess: function(result){} 
       }); 
} 

получается, я только нужно добавить evalScripts: истинные на вызов Ajax, а затем положить функции $$ на странице /myurl.html в конце всего.

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