当元素在事件绑定后附加到DOM时,触摸事件不起作用
Touch events do not work when element appended to DOM after events binding
当我在HTML代码中创建一个div时,ant会在上面绑定触摸事件,一切都会变得完美。但当我创建这样的div时:$('<div ...></div>')
,那么绑定的触摸事件就不起作用了。iPad和Android设备上也有同样的行为。
这里有一个代码来重现一个问题:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="libs/jquery-1.7.2.js"></script>
<script language="JavaScript">
$(function() {
$('#a').bind('touchstart', function(e) { alert('It works!'); });
var b = $('<div style="width:100px; height:100px; background-color:red;" id="b" ></div>');
b.bind('touchstart', function(e) { alert('Does not work :-('); });
$('body').append(b);
});
</script>
</head>
<body>
<div style="width:100px; height:100px; background-color:green;" id="a" ></div>
</body>
jsfiddle的示例:http://jsfiddle.net/EqJDA/11/
我四处搜索,发现若在同一个元素上绑定任何鼠标事件和触摸事件,那个么触摸事件就会被忽略。我认为jQuery添加了一些隐藏的鼠标事件,并为div"b"列出了所有这些事件,但只有一个触摸事件。
更新:如果事件绑定在附加到DOM的元素之后,那么everythig运行良好。但我无法预测元素何时会被附加到DOM,必须在它发生之前构造它并添加事件。
那么,有人知道为什么会发生这种情况吗?有什么变通办法吗?谢谢
在阅读代码后,我认为您没有在DOM中添加元素。因此,该活动没有得到注册。
试试这个。
$(function() {
$('#a').bind('touchstart', function(e) { alert('It works!'); });
var b = $('<div style="width:100px; height:100px; background-color:red;" id="b" ></div>');
$('body').append(b);
b.bind('touchstart', function(e) { alert('Does not work :-('); });
});
相关文章:
- DOM事件通过JSON转换为java
- 从dom中删除任何元素后,Touchmove事件停止触发
- IE9-添加和删除DOM元素会破坏父keydown事件
- 调用DOM提交方法时未激发jQuery提交事件
- 将Backbone.View重新注入DOM,保留事件而不是创建新事件
- 停止事件以在DOM中弹出
- 直接在DOM事件处理程序中调用作用域函数的最短方法是什么
- Meteor - 从另一个模板事件处理程序访问 DOM 元素
- 触发具有较低Z索引值的DOM元素的事件
- 动态创建的DOM元素上的jQuery事件绑定
- Angular JS根据搜索结果和点击事件更新DOM元素
- 在 JavaScript 中迭代 DOM 时关闭标记事件
- 如何克隆或重新调度 DOM 事件
- 当我认为它不应该重新渲染视图时,如何防止 Meteor 在 html 选择 dom 单击事件上重新渲染视图
- 测试 JavaScript Zombie 事件处理程序或 DOM 元素
- 如何将 DOM 元素绑定到自定义 $.touchpress 事件
- 绘制DOM元素:鼠标事件会被背景元素混淆
- DOM事件链接不起作用
- 禁用Javascript事件DOM中的Function
- 在之前(而不是之后)触发的事件DOM 元素在 javascript 中滚动