jquey的自定義事件小結


jQuery的自定義事件是通過onone綁定的,然後再通過trigger來觸發這個事件

jQuery 提供的自定義事件可以引入語義,很好地解決問題

複製代碼
//1. 定義自定義事件
$('#username').on('blank.username', function() {
  console.log('請不要留空');
});
$('#username').on('notExist.username', function() {
  console.log('用戶名不存在');
});
$('#username').on('success.username', function() {
  console.log('用戶名存在');
});

//2. 觸發自定義事件
$('.js-submit').on('click', function() {
  var username = $('#username').val();
  username = $.trim(username);
  if (username === '') {
    $('#username').trigger('blank.username');      // 如果 username 爲空值,則觸發 blank.username 事件
  }
  $.post(url, {username: username}, function(data) {
    var res = data;
    if (res.retcode === -1) {
      $('#username').trigger('notExist.username'); // 如果用戶不存在,則觸發 notExist.username 事件
    } else if (res.retcode === 0) {
      $('#username').trigger('success.username'); // 如果用戶存在,則觸發 sucess.username 事件
    }
  });
});
複製代碼

trigger需要處理的問題

1.模擬事件對象,用戶模擬處理停止事件冒泡

triger()方法觸發事件後,會執行瀏覽器默認操作。例如:

$("input").trigger("focus");

以上代碼不僅會觸發爲input元素綁定的focus事件,也會使input元素本身得到焦點(瀏覽器默認操作)。

如果只想觸發綁定的focus事件,而不想執行瀏覽器默認操作,可以使用jQuery中另一個類似的非冒泡式方法-triggerHandler()方法。

$container.one("focus",function(){
    .....
});
$("input").triggerHandler("focus");

該方法會觸發input元素上綁定的特定事件,同時取消瀏覽器對此事件的默認操作,即文本框指觸發綁定的focus事件,不會得到焦點。

請注意這裏使用了jQuery 的one 來代替on。這兩者的區別在於,one 在觸發處理器之後會自動將其刪除。

2.區分事件類型,觸發標準的瀏覽器事件 和 自定義事件名綁定的處理程序。

解決方法:事件名稱+命名空間

p4.on('click.aaa.ccc',function(e,vv,c){
       console.log('p4')
   })
p4.trigger('click.aaa')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章