【问题标题】:how to use this as a jquery selector to bind an event at document level如何将其用作 jquery 选择器以在文档级别绑定事件
【发布时间】:2013-01-17 16:35:29
【问题描述】:

在 jquery mobile 中,swipeleft 事件在绑定到低于 document 的元素时会触发两次,因此我必须将 swipeleft 事件绑定到插件选择的所有对象。 以下插件将通过以下方式初始化:

$('#mylistview li').myPlugin();

$.fn.myPlugin = function(o){    

    return this.each(function(i, el){
        this.on("swipeleft", function ( e ) {
            ...
}

此代码将 swipeleft 事件绑定到每个元素,但必须在文档级别完成。如何将 THIS 用作 jquery 选择器?上面的代码报错

   $.fn.myPlugin = function(o){ 
       return this.each(function(i, el){
                      //how to use "this" as a selector???
           $(document).on('swipeleft', this,  function(event){
            ...
    }

【问题讨论】:

  • "在绑定到低于文档的元素时被触发两次" 你在冒泡事件吗?也就是说……你要取消冒泡系统吗?
  • 这个系统在这种情况下不起作用,尝试了 event.stopPropagation() 等等。没有任何作用
  • 无论如何我不明白为什么你需要听滑动所有元素而不是页面(或页面)。
  • 这就是我要实现的andymatthews.net/read/2011/02/18/…

标签: jquery-mobile jquery-selectors


【解决方案1】:

你可以这样重写你的函数:

$.fn.myPlugin = function(o) {
   var selector = this.selector;
   return this.each(function(i, el) {
      $(document).on('swipeleft', selector,  function(event) {
         // Code goes here
      });
   });
}

【讨论】:

  • this.selector 返回类似“#mentions-list li.slice(0,1)”的值,因此选择器崩溃
  • 如果你按照你写的方式调用插件,并且使用选择器#mylistview li,这不可能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 2019-08-16
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多