Повторяющееся событие jQuery focusout - PullRequest
0 голосов
/ 28 февраля 2012

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

например, если я щелкаю элемент 3 раза подряд (а затем нажимаю снаружи, чтобы вызвать фокусировку), он печатает 3 комментария журнала, если я затем нажимаю еще 2 раза (и снова снаружи), он печатает 5 log Комментарии.

и я хочу получать только 1 log комментарий каждый раз, когда я нажимаю вне элемента.

помочь кому-нибудь?

 $("#main-wrapper").click(function (e) {
    var contenteditable = $(e.target).attr('contenteditable');
    if (contenteditable == 'true') {
        $(e.target).focusout(function() {
            var content = $(this).html();
            console.log("get: " + content);
        });
    };          
});

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Попробуйте отменить привязку события.

$("#main-wrapper").click(function (e) {
var contenteditable = $(e.target).attr('contenteditable');
if (contenteditable == 'true') {
    $(e.target).unbind('focusout').focusout(function() {
        var content = $(this).html();
        console.log("get: " + content);
    });
};          
});
1 голос
/ 28 февраля 2012

Вы подключаете новый обработчик событий focusout каждый раз, когда обрабатываете click. Эти обработчики событий не заменяются , а добавляются , и каждый обработчик событий выполняется при запуске события. Вот почему вы получаете столько же зарегистрированных сообщений, сколько и предыдущие клики.

Вы должны иметь возможность указать обработчик focusout только один раз, но то, как вы хотите, чтобы он запускался, конечно, зависит от того, чего вы хотите достичь.

$("#main-wrapper").focusout(function (e) {
  var contenteditable = $(e.target).attr('contenteditable');
  if (contenteditable == 'true') {
    var content = $(this).html();
    console.log("get: " + content);
  }          
});
...