Вы заменяете все содержимое Panel1
, включая кнопку, к которой подключен прослушиватель событий.
Таким образом, когда окно загружается впервые, прослушиватель событий правильно подключается.Но когда ajax-запрос заменяет содержимое div, кнопка тоже исчезает.Даже если у нового контента есть подобная кнопка, к нему (к новой кнопке) не будет подключен прослушиватель событий.
Я не знаю, какой класс AjaxPanel вы используете, но вот как ясделал бы это с прямым Прототипом
function observeButton() {
// The $$() function returns an array, but here we're looking for 1 specific
// element, so the standard $() function is the one to use. No need to mess
// with the invoke() method and all that
$('ShowDialog').observe('click', function(event) {
alert('Hi!');
new Ajax.Updater('Panel1', url, { // you'll need to define "url"
// onComplete is called after the element has been
// updated so this new call to observeButton() will
// attach a listener to the *new* button
onComplete: observeButton
});
});
}
document.observe('dom:loaded', function() {
observeButton();
});
В качестве альтернативы, вы можете просто поместить кнопку вне панели, чтобы она не заменялась.Или вы можете использовать jQuery и метод .live()
.