在jquery中使用.on时需要帮助,以便它也可以处理动态数据
Need help in using .on in jquery so that it can work with dynamic data also
我有一个函数"single_double_click",我通过$('#packagelisttable tr').single_double_click(fn)
调用它,它适用于静态数据。
但是,当我部署相同的应用程序来处理动态数据时,它没有响应。我也尝试使用.on
,如几篇帖子中所述,但也没有成功。请在下面找到相同的内容:
-
$(#packagelisttable ).on('single_double_click', 'tr', fn)
-
$(document).on('single_double_click', 'packagelisttable tr', fn)
我需要单击一行表格(#packagelisttable
(,并且需要检查它是单击还是双击。
请找到我正在使用的代码:
jQuery.fn.single_double_click = function (single_click_callback, double_click_callback, timeout) {
return this.each(function () {
var clicks = 0,
self = this;
jQuery(this).click(function (event) {
clicks++;
if (clicks == 1) {
setTimeout(function () {
if (clicks == 1) {
single_click_callback.call(self, event);
} else {
double_click_callback.call(self, event);
}
clicks = 0;
}, timeout || 300);
}
});
});
}
//$(#packagelisttable ).on('single_double_click', 'tr', function(){
//$(document).on('single_double_click', 'packagelisttable tr', function(){
// $('#packagelisttable tr').single_double_click(function () {
alert("Try double-clicking me!")
},
function () {
alert("Double click detected")
});
on
的委托事件版本用于事件,但single_double_click
不是事件。它是一个函数。
这种方式将jQuery插件/函数连接到动态加载的元素。
加载后,您需要将任何新元素连接到插件,或者更改插件以使用类(例如 class="singleordouble"
(,并使用委托的点击事件处理程序,或者您可以添加一个选择器作为附加参数并附加到不变的祖先元素(如 Cerlin Boss 所示(。
例如
jQuery(document).on('click', '.singleordouble', function (event) {
但是如果你这样做,使用插件就变得毫无意义了。
使用已有的设置超时技巧生成自己的自定义点击事件会更加灵活。
以下是使用自定义事件的完整示例: http://jsfiddle.net/TrueBlueAussie/wjf829ap/2/
在任何地方运行此代码一次:
// Listen for any clicks on the desired
$(document).on('click', '.singleordouble', function (e) {
var $this = $(this);
var clicks = $this.data("clicks") || 0;
// increment click counter (from data stored against this element)
$(this).data("clicks", ++clicks);
// if we are on the first click, wait for a possible second click
if (clicks == 1) {
setTimeout(function () {
var clicks = $this.data("clicks");
if (clicks == 1) {
$this.trigger("customsingleclick");
} else {
$this.trigger("customdoubleclick");
}
$this.data("clicks", 0);
}, 300);
}
});
它将生成自定义事件(在此示例中称为customsingleclick
和'customdoubleclick,但随心所欲地调用它们(。
然后,您可以简单地侦听以下自定义事件:
$(document).on('customsingleclick', function(e){
console.log("single click on " + e.target.id);
});
$(document).on('customdoubleclick', function(e){
console.log("double click on " + e.target.id);
});
或者使用委托的事件处理程序:http://jsfiddle.net/TrueBlueAussie/wjf829ap/3/
$(document).on('customsingleclick', '.singleordouble', function(){
console.log("single click on " + this.id);
});
$(document).on('customdoubleclick', '.singleordouble', function(){
console.log("double click on " + this.id);
});
这个怎么样
我对您的代码进行了一些小的更改。不确定这是否适合您。
我又添加了一个参数,它需要一个选择器。如果您有任何疑问,请发表评论。
jQuery.fn.single_double_click = function (selector, single_click_callback, double_click_callback, timeout) {
return this.each(function () {
var clicks = 0,
self = this;
jQuery(this).on('click', selector, function (event) {
clicks++;
if (clicks == 1) {
setTimeout(function () {
if (clicks == 1) {
single_click_callback.call(self, event);
} else {
double_click_callback.call(self, event);
}
clicks = 0;
}, timeout || 300);
}
});
});
}
用法:
$('#headmnu').single_double_click('li',
function () {
; // not doing anything here
}, function () {
alert('twice')
});
这里li
是第一个jquery选择器($('#headmnu')
(的子项
ul
这也适用于动态添加的元素。
更新
只是为了澄清$('#headmnu')
是所有li
的父元素。
我在这里使用了event delegation
来实现这一点。有关详细信息,请参阅文档
我检查了你的代码,如果你已经粘贴了,那么你也应该检查
$(#packagelisttable ).on('single_double_click', 'tr', fn) // shold be
$('#packagelisttable').on('single_double_click', 'tr', fn)
$(document).on('single_double_click', 'packagelisttable tr', fn) // should be
$(document).on('single_double_click', '#packagelisttable tr', fn)
- 即使光标位于屏幕边缘,也可以跟踪鼠标速度
- 有没有什么方法可以停止Jquery中的animate(也可以停止完整的回调函数)
- 在下拉列表中的页面加载中已经选择了一个选项,该选项也可以更改
- javascript数组既可以是数字数组,也可以是关联数组
- 我需要一个注册按钮,它可以将数据发送到mySQL服务器,也可以在单击时重定向
- 在更改时,如果没有使用jquery更改,也可以删除对select元素的关注
- jQuery聚焦文本框并转到末尾,但也可以设置光标的位置,以便用户可以看到它
- regex某个字符可以存在也可以不存在,但之后什么都没有
- 即使它在 Chrome 浏览器上不起作用,也可以单击
- 即使在从DOM中删除后,也可以保存jQuery对象
- 我无法获得热图.js即使是简单的热图也可以工作
- 在jquery中使用.on时需要帮助,以便它也可以处理动态数据
- JQUERY - .html() 也可以查看 php
- 如何创建在引导程序 3 中也可以纵向扩展的响应式映像
- Socket.io 聊天应用程序,也可以发送图像甚至文件
- 将信息提交到url,也可以打开PDF
- 闪烁也可以隐藏的文本
- 将标签的信息传递到php并在另一个页面中显示(也可以在另一页面中更新)
- HTML5视频,使用Javascript更改源代码,不在Safari上加载,在Chrome上也可以
- 如何重写jQuery日历的删除,以便我也可以删除我的数据库数据