Здесь: http://jsfiddle.net/z7fjW/682/
Это супер странно, я не могу понять. Я нашел обходное решение с использованием делегированных событий, но продолжу расследование, пока не найду причину, по которой событие срабатывает только один раз.
$('body').on('click','#search-button',function() {
if(!searchAndHighlight($('#search-term').val())) {
alert("No results found");
}
});
EDIT: ok !! Как только я понял, это становится довольно очевидным. С помощью этого кода
$(selector).html($(selector).html()
.replace(searchTermRegEx, "<span class='highlighted'>"+searchTerm+"</span>"));
selector
установлен в тело. Затем вы вызываете html()
по всему телу, только для повторного ввода одного и того же html с добавлением span
. Слушатель кликов был привязан к элементу #search-button
. Поскольку вы переписали весь html тела, вы также перезаписали прослушиватель кликов. Сложная часть для меня заключалась в том, что html выглядел точно так же в инспекторе Chrome, поэтому не сразу стало очевидно, что слушатель был несвязан.
Это объясняет, почему мой обходной путь работал, потому что при делегировании события слушатель подключен к body
, когда он обнаруживает щелчок, только тогда jquery ищет #search-button
.
Я бы не переписывал весь html тела, потому что он вызывает головные боли, подобные этому. Попробуйте использовать это вместо того,
var selector = selector || "#bodyContainer";
Теперь вы только перезаписать #bodyContainer
, а не весь HTML тела. С помощью этого вы также можете использовать свой оригинальный прослушиватель событий.
Соответствующие Docs: http://api.jquery.com/html/#html2
Когда .html() используется для установки содержимого элемента, любое содержание, которое было в этом элементе полностью заменяется новым содержанием. Кроме того, jQuery удаляет другие конструкторы, такие как обработчики данных и событий, из дочерних элементов, прежде чем заменять эти элементы новым контентом.
Спасибо, хотел бы я принять это как ответ или подождать, пока вы еще не изучили? Я доволен использованием этой работы. –
Уверенный, вы можете принять его, я буду комментировать позже, если я решит тайну. –
Нашел причину, внеся изменения. –