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).

0
john mossel 6 czerwiec 2011, 23:56

2 odpowiedzi

Najlepsza odpowiedź
$(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.

1
lonesomeday 7 czerwiec 2011, 00:00

Wynika to z bąbelkowania akcji.

Dodanie event.stopPropagation(); powinno to naprawić.

(pamiętaj - $('.note_content').click(function(event) {...)

3
Naftali aka Neal 6 czerwiec 2011, 23:57