2009-04-26 8 views
0

Я попытался показать сообщение об ошибке с использованием эффекта jquery fadeTo и попытался скрыть сообщение, добавив кнопку и используя fadeout, но, похоже, не работает.Как связать события с добавленным элементом?

Что я сделал:

$("#sub_error") 
    .fadeTo(200, 0.1, function() 
    { 
    $("#sub_error") 
     .html(error.join("<br/><br/>")) 
     .append('<br/><input type="button" name="err_ok" id="err_ok" value="ok">') 
     .addClass('subboxerror') 
     .fadeTo(900,1); 
    }); 

$("#err_ok").click(function() 
{ 
    $("#sub_error").fadeOut("slow"); 
}); 

Что я делаю не так, может кто-нибудь мне помочь?

+0

В какой момент он прекращает работать? – SilentGhost

+0

Хм, перечитывая quesiton, я уже не уверен. Я не знаю, помогает ли мой ответ. –

+0

, когда я нажимаю кнопку, элемент div, имеющий идентификатор, должен был исчезнуть, но это не так, и я не знаю почему? может быть, он не имеет доступа к приложенной кнопке «err_ok» – jarus

ответ

2

Элемент #err_ok не существует, поэтому обработчик .click() не применяется к нему.

Вы можете решить эту проблему, поставив

$("#err_ok").click(function() { 
    $("#sub_error").fadeOut("slow"); 
}); 

в функции и вызвать функцию после создания элемента в DOM.

Edit: Это должно быть полное решение:

$("#sub_error").fadeTo(200, 0.1, function() { 
    $("#sub_error") 
     .html(error.join("<br/><br/>")) 
     .append('<br/><input type="button" name="err_ok" id="err_ok" value="ok">') 
     .addClass('subboxerror') 
     .fadeTo(900, 1); 
    bindEvents(); 
}); 

function bindEvents() { 
    $("#err_ok").click(function() { 
     $("#sub_error").fadeOut("slow"); 
    }); 
} 

Существует также функция «live», которая связывает события в будущем создали элементы DOM тоже.

+1

Вы также можете просто привязать событие к err_ok в функции, где он создан. – Shog9

+0

спасибо большое Томас, это сработало, я подозревал, что это не доступ к прилагаемой кнопке ... спасибо;) – jarus

+0

Нет проблем. Раньше у меня была такая же проблема, и мне потребовалось некоторое время, чтобы выяснить :-) –

0

FWIW, есть зарегистрированные билеты на ошибки fadeTo/fadeOut на трекер ошибок JQuery.

0

Существует несколько способов сделать это. Во-первых, вы можете добавить обработчик щелчка к элементу после его вставки:

$("#sub_error").fadeTo(200, 0.1, function() { 
    $("#sub_error") 
     .html(error.join("<br/><br/>")) 
     .append('<br/><input type="button" name="err_ok" id="err_ok" value="ok">') 
     .addClass('subboxerror') 
     .fadeTo(900, 1) 
     .find('#err_ok') 
     .click(function() { 
     $("#sub_error").fadeOut("slow"); 
     }); 
}); 

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

$('#err_ok').live('click', function() { 
    $('#sub_error').fadeOut('slow'); 
});