我最近开发了一个站点http://www.bandwidthpool.com,一个带宽竞标站点。我使用动态页面加载来获得更流畅的体验,但最近发现了一些问题。导航链接和按钮都是元素。很多次我注意到你必须点击链接/按钮两次,有时才能让它触发点击事件。似乎没有押韵或原因,我无法弄清楚这种行为背后的任何模式或推理。
我设置了一个测试页面来更好地说明这一点:
http://www.bandwidthpool.com/_test/
单击按钮,您会注意到有时您必须单击它几次才能触发事件。代码很简单...
_Test.js 按钮事件处理程序
$(document)
.on('click', sel.testButton, function(e) {
e.preventDefault();
$(sel.testDisplay)
.html($(this).html())
.css('color', $(this).data('color'));
});
这些按钮只是列表中的锚元素:
它似乎在所有浏览器上都显示了这种行为。据我所知,'.on' 方法是附加事件处理程序的最新且可靠的方法......这是已知的错误吗?我正在使用 jQuery 1.7.1。感谢您的帮助,如果您需要更多信息,请告诉我。
完整的 _Test.js 代码
BWPool._Test =
{
handlers : [], // Container for event handlers
selectors : {
testDisplay : 'div.test-display',
testButton : 'div.test-buttons li a',
},
init : function() {
var self = this; var sel = this.selectors
self.initHandlers();
},
initHandlers : function() {
var self = this; var sel = this.selectors
$(document)
.on('click', sel.testButton, function(e) {
e.preventDefault();
$(sel.testDisplay)
.html($(this).html())
.css('color', $(this).data('color'));
});
},
// Remove event handlers and timers
destruct : function() {
var self = this; var sel = self.selectors;
$.each(self.handlers, function(i, handler) {
$(document).off(handler.event, handler.selector);
});
}
};
$(function() { BWPool._Test.init(); })