Dlaczego poniższy kod powoduje, że jquery wyświetla alert 3 razy?
.note_text
to klasa w obrębie .note_content
.
$('.note_content').click(function() {
var note_text = $(this).find(".note_text");
$(note_text).focus();
// save its contents:
var original_text = note_text.html();
$(note_text).blur(function() {
if (note_text.html() !== original_text)
{
alert('Not the same');
}
});
});
Kiedy zewnętrzny element div jest podświetlony, chcę, aby skupiono się na wewnętrznym div (zawierającym tekst).
2 odpowiedzi
$(note_text).blur(function() {
Ta linia wiąże procedurę obsługi zdarzeń. Za każdym razem, gdy element jest rozmyty, procedura obsługi będzie działać. Przypisujesz nową obsługę za każdym razem, gdy funkcja obsługi kliknięć .note_content
jest uruchamiana, więc będziesz mieć wiele alertów.
Sposobem na obejście tego jest przechowywanie danych w elemencie, a nie w zamknięciu.
$('.note_content').click(function() {
$(this).find('.note_text').data('oldText', node_text.html()).focus();
});
$('.note_text').blur(function() {
if ($(this).html() !== $(this).data('oldText')) {
alert('not the same');
}
});
W ten sposób opiekunowie są związani tylko raz.
Wynika to z bąbelkowania akcji.
Dodanie event.stopPropagation();
powinno to naprawić.
(pamiętaj - $('.note_content').click(function(event) {...
)
Podobne pytania
Nowe pytania
jquery
jQuery to biblioteka JavaScript, rozważ także dodanie tagu JavaScript. jQuery to popularna biblioteka JavaScript działająca w różnych przeglądarkach, która ułatwia przechodzenie przez Document Object Model (DOM), obsługę zdarzeń, animacje i interakcje AJAX, minimalizując rozbieżności między przeglądarkami. Pytanie oznaczone tagiem jQuery powinno być powiązane z jQuery, więc jQuery powinno być używane przez dany kod i przynajmniej elementy związane z użyciem jQuery muszą znajdować się w pytaniu.