2009-07-31 1 views
2

Я вроде новичок в этом так, пожалуйста, медведь со мной ...AJAX не «отлов» событие без обновления

Скажем, у меня есть этот код яваскрипта

$(document).ready(function() { 
    $("a").click(function() { 
     alert("Hello world!"); 
    }); 
}); 

Я так понимаю это , этот код «захватит» любой выбор ссылок и разместит поле предупреждения. Обычно это нормально работает.

Теперь на той же странице у меня также есть таблица, и на submit я беру форму отправки формы и используя JQuery, чтобы добавить строку к показу пользователей, пока данные отправляются на сервер.

Вот код для перехвата запрос на почту (в основном взяты из Railscasts #136)

jQuery.ajaxSetup({ 
    'beforeSend': function(xhr) { 
     xhr.setRequestHeader("Accept", "text/javascript") 
    } 
}) 

jQuery.fn.submitWithAjax = function() { 
    this.submit(function() { 
     $.post(this.action, $(this).serialize(), null, "script"); 
     return false; 
    }) 
    return this; 
}; 

$(document).ready(function() { 
    $("#new_ride_form").submitWithAjax(); 
}) 

Вот код, чтобы сделать частичный ...

$("#add_new_ride").before("<%= escape_javascript(render(:partial => @ride)) %>"); 
$("#ride_<%[email protected] %>").effect("highlight", {color: '#aaffaa'}, 2000); 
$("#new_ride_form")[0].reset(); 

Вот код, чтобы создать ссылку в одна из ячеек таблицы, генерируемых частичным

<td><%= link_to 'remove', ride_url(ride), 
    :id => :destroy_ride, 
    :method => :delete, 
    :href => delete_ride_url(ride) %> 
</td> 

Теперь, когда я ubmit form, затем нажмите ссылку «удалить» во вновь созданной строке таблицы, она просто отправит запрос удаления. Javascript для создания окна предупреждения Hello World не выполняется.

Если, однако, отправьте форму, создайте новую строку таблицы , а затем вручную обновите страницу, прежде чем нажать ссылку «удалить» во вновь созданной строке таблицы, появится диалоговое окно «Hello World» ожидается.

Что происходит здесь, где мне нужно обновить вручную до получения ожидаемого поведения?

Есть ли событие document.ready или что-то, что мне нужно для запуска после использования AJAX, чтобы добавить строку таблицы, чтобы сообщить код, что «эй, есть кое-что новое, что вам нужно посмотреть».

Спасибо!

Кстати, я кодирую Rails и JQuery, но я не уверен, что это имеет значение.

+0

$ ("a"). Click (function() {}); срабатывает один раз, когда документ готов. Вам нужно будет вручную добавить событие click к динамически созданным элементам. – doomspork

ответ

4

Похоже, вы хотите использовать jQuery.live вместо jQuery.click. Разница в том, что jQuery.click свяжет событие click для всех текущие<a> элементов и jQuery.live свяжут все текущие и будущие элементы.

$(document).ready(function() { 
    $("a").live("click", function() { 
     alert("Hello world!"); 
    }); 
}); 
+0

избил меня на 22 секунды! :-( – Kip

+0

jQuery.live - отличный ответ, но поскольку он функционирует иначе, чем традиционное связывание, и не все события поддерживаются, важно прочитать его и убедиться, что он удовлетворяет ваши потребности. – doomspork

+0

Спасибо! Это было именно то, что мне было нужно. – Vinnie