Я не уверен, как это описать, но я попробую с некоторым базовым кодом:
<input type="text" id="num" placeholder="eg: 55"/>
Допустим, мы добавим базовый код фильтрации:
$('.num').keyUp(function(){
this.value = parseInt(this.value);
});
Это то, что делает конечный разработчик.Теперь давайте представим, что он / она также использует систему проверки формы нашего проекта:
// ...
if(el.val()!=parseInt(el.val()))
showError(el);
// ...
Предположим, что наш showError показывает всплывающую подсказку, только когда пользователь наводит на нее курсор:
function showError (el){
el.css('border-color', 'red');
el.mouseOver(function(){
showErrorTooltip(this);
});
}
Это прекрасно работает, но что, если ошибка была исправлена?С jQuery вы обычно делаете:
removeError(el);
Эта функция удаляет некоторые CSS-элементы из рассматриваемого элемента, но, что наиболее важно, она также удаляет наше событие mouseOver, подобное тому, которое мы добавили выше:
function removeError(el){
el.css('border-color': null); // default color
el.unbind('mouseOver');
}
Это работает хорошо, пока конечный разработчик не должен сделать что-то броское, когда мышь наводит курсор на элемент, с помощью jQuery mouseOver.
Проблема в том, что моя функция removeError очищает оба моисобытие, а также событие разработчика.
Итак, мой последний вопрос: как пометить обратные вызовы событий, чтобы я мог их выборочно удалить?
Есливышеприведенное, кажется, не имеет смысла, это какой-то псевдокод на то, как может выглядеть результат:
Что-то вроде:
var tag_a = $('#a').click(function(){ alert('test1'); });
var tag_b = $('#a').click(function(){ alert('test2'); });
$('#a').unbind(tag_a);
$('#a').click(); // shows test2 only