2016-07-06 35 views
2

我想問,如何從document中刪除事件處理程序,但只有那些具有命名空間的事件處理程序?解除與命名空間的一些事件處理程序

我有這段代碼,我沒有看到任何錯誤,但這個函數總是觸發mouseuptouchend的事件處理程序,即使在.unbind之後。我確信我在這段代碼中有一些錯誤。

$(".inp").on("autocompleteresponse", function(event, ui) { 
    $(document).bind("mouseup.test, touchend.test", function(e) { 
     var container = $('.ui-autocomplete'); 
     if (!container.is(e.target) && container.has(e.target).length === 0) { 
      if (ui.content.length > 0) { 
       ui.item = ui.content[0]; 
       console.log (ui.item); 
       $(".inp").val(ui.item.label); 
       // This will fire always, on document click, should only once per time 
       $(document).unbind("mouseup.test, touchend.test"); 
      } 
     } 
    }); 
}); 

感謝意見

回答

2

首先,on()off()現在的首選方法,而不是過時的bind()unbind()

其次,要解決您的問題,您應該用空格而不是逗號分隔事件。試試這個:

$(".inp").on("autocompleteresponse", function(event, ui) { 
    $(document).on("mouseup.test touchend.test", function(e) { 
     var container = $('.ui-autocomplete'); 
     if (!container.is(e.target) && container.has(e.target).length === 0) { 
      if (ui.content.length > 0) { 
       ui.item = ui.content[0]; 
       console.log(ui.item); 
       $(".inp").val(ui.item.label); 

       $(document).off("mouseup.test touchend.test"); 
      } 
     } 
    }); 
}); 

還要注意的是,如果你想關閉與命名空間相關聯的所有事件,你可以通過單獨的命名空間的off()方法:

$(document).off(".test")