2016-09-25 8 views
0

Я использую keydown на одном из своих элементов, но я хочу развязать его, если он не вписывается в мое состояние. Но я использовал off() и unbind, похоже, он не работает. Интересно, почему.удалить событие keydown из селектора не работает?

if (imgDOM.naturalWidth > imgDOM.naturalHeight) { 

    $('#caption').attr('maxlength', 220); 

    $("#caption").keydown(function(e) { 
    if ((e.keyCode == 10 || e.keyCode == 13)) { 
     e.preventDefault(); 
     alert('Landscape photo is allowed to have only single line of message.'); 
     return false; 
    } 
    }); 

} else { 
    $('#caption').off('keydown', function() { //this won't work 
    limit_lines_for_potrait(); 
    }) 
} 
+0

возможно это условие 'if (imgDOM.naturalWidth> imgDOM.naturalHeight) {' всегда верно. – vher2

+0

@ vher2 Нет, конечно. –

ответ

0

Вы используете .off() как будто он слушает для нового события, функция обработчика в этом случае является в Другой крупный функции развязывать, а не функция, которая запускается, когда после развязывания. limit_lines_for_potrait() должна быть функцией, которую вы хотите удалить, но ваша исходная привязка использует анонимную функцию, которую вы не можете ссылаться.

Предполагая, что у вас нет других привязок к одному и тому же элементу и событию, вы можете упростить это: $('#caption').off('keydown'); Который отвяжет все слушатели этого элемента и типа события.

Чтобы запустить функцию после того, как, просто вызовите эту функцию:

} else { 
    $('#caption').off('keydown'); 
    limit_lines_for_potrait(); 
} 

Поскольку отвязать не слушатель, вам не нужно ждать обратного вызова, она всегда будет выполняться до следующего линии.

+0

Я хочу удалить привязку keydown и запустить limit_lines_for_potrait –

+0

@MariaJane Я обновил ответ, вы можете просто запустить функцию вручную после развязывания события (как показано vher2) Поскольку unbind не является слушателем, вам не нужно ждать обратного вызова, он будет выполняться до начала следующей строки – DBS

+0

, но почему обратный вызов не работает так, как должен? –

1

Если вы удалите анонимную функцию в off, она решит вашу проблему.

.... 

} else { 
    $('#caption').off('keydown'); 
    limit_lines_for_potrait(); 
} 
+0

off не имеет обратного вызова? –

+0

Это не обратный вызов, как объясняется @DBS – vher2

Смежные вопросы