找到附有touchstart处理程序的所有元素

时间:2015-03-30 08:07:02

标签: javascript jquery events

是否有方法(JS pure或Jquery)搜索页面上的所有元素(例如)附加了touchstart事件处理程序?

我读到$ ._数据($(' .element')[0],' events'); method获取某个元素的事件。我的想法就是反过来了。

提前致谢!

修改

我试着解释我在做什么(或者至少计划做什么;-)。 基本上我需要一个针对iOS8 + bug的解决方法,该错误涉及在主屏幕(独立)使用中在iframe中注册的缺失触摸事件。

所以我的想法是将一个重叠的div放在iframe之上。在其中我创建克隆(空白)伪元素,触发触摸事件代替iframes真实元素。 所以我做了(这部分工作得很好):

var $frameContents = $("#my_iframe").contents();
$("#overlayer").empty(); // avoid double elements on reopening  

// example element  
var $exampleElement = $frameContents.find("#exampleElement");

$exampleElement
    .clone()
    .empty()
    .appendTo( "#overlayer" )
    .on( 'touchstart', function(e) {
        e.stopPropagation();
        $exampleElement.trigger( 'click' );
    } );

正如我所说的一切都很好。 我的想法的第二部分是(而不是自己定义每个元素)让代码搜索所有使用touchstart事件的元素并自动执行该过程。

参考您的评论和回答我试过:

var touchElements = []; // array for all elements to be found (with touchstart events attached to them)

$.each( $frameContents, function( index, value ) {

    $(value).each(function(i) { // loop through each button
        var log = $._data( $(value).get(i), "events" ); // get the event bound on it

        if ( log.touchstart ) { // check if a particular event is bound
            touchElements.push(value); // perform the task.
        };
    } );
} );

alert(touchElements);

可悲的是,这部分根本不起作用,因为我没有太彻底地理解每一个东西:-( 如何使用包含touchstart事件的所有元素创建此数组?

获得一些帮助会很酷。 到目前为止,感谢您的想法!

1 个答案:

答案 0 :(得分:0)

正如你有一段代码,你可以这样使用:

$("button").on({ // here bound some events on a button element
  click: function() {
    alert("Hello")
  },
  touchstart: function() { // here is the touchstart event
    alert("World")
  }
});

// Lookup events for this particular Element
$('button').each(function(i) { // loop through each button
  var log = $._data($("button").get(i), "events"); // get the event bound on it

  if (log.touchstart) { // check if a particular event is bound
    console.log('yes touchstart is bound.'); // perform the task.
    // logs the message 4 times as touchstart event is bound on
  } // button element only not on type"submit".
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>mybtn</button>
<button>mybtn</button>
<button>mybtn</button>
<input type='submit' value="submit" />
<button>mybtn</button>