Javascript 扩展on()函数的jQuery插件不';“不接受”;这";
我正在编写一个插件来扩展jQuery的Javascript 扩展on()函数的jQuery插件不';“不接受”;这";,javascript,jquery,mousetrap,Javascript,Jquery,Mousetrap,我正在编写一个插件来扩展jQuery的on()函数,以实现mousetrap.js 我应该从函数获取此并将其传递给on() 这是我的代码: $.fn.superon = function (keys, myfn) { $("body").on("click", this, function (e) { myfn(); }); Mousetrap.bind(keys, function () {
on()
函数,以实现mousetrap.js
我应该从函数获取此
并将其传递给on()
这是我的代码:
$.fn.superon = function (keys, myfn) {
$("body").on("click", this, function (e) {
myfn();
});
Mousetrap.bind(keys, function () {
myfn();
});
};
$.fn.superoff = function (keys) {
$("body").off(this);
Mousetrap.unbind(keys);
};
问题是,如果我使用它,事件将附加到所有元素,而不仅仅是选定的元素
我做错了什么?到
.on()
的第二个参数是选择器字符串,而不是元素。您只需省略第二个参数,并将单击绑定到this
,而不是body
$.fn.superon = function (keys, myfn) {
this.on("click", function (e) {
myfn();
});
Mousetrap.bind(keys, function () {
myfn();
});
};
$.fn.superoff = function (keys) {
this.off("click");
Mousetrap.unbind(keys);
};
“请在.off
功能中单击”
李>
(function ($) {
$.fn.superon = function (selector, keys, myfn) {
$("body").on("click", selector, function (e) {
myfn();
});
Mousetrap.bind(keys, function () {
myfn();
});
return this;
};
$.fn.superoff = function (selector, keys) {
$("body").off("click", selector);
Mousetrap.unbind(keys);
return this;
};
})(jQuery);
$("#click").superon("#click", "a", function () {
alert("hello");
$("#click").superoff("a");
});
});
$("#click2").superon("#click2", "b", function () {
alert("hello2");
$("#click2").superoff("b");
});
希望能有所帮助……这是我的解决方案,感谢@devnull69的建议
// on() with keyboard shortcut support
$.fn.superon = function (selector, keys, myfn) {
this.on("click", selector, function (e) {
myfn();
});
Mousetrap.bind(keys, function () {
myfn();
});
return this;
};
// off() with keyboard shortcut support
$.fn.superoff = function (selector, keys) {
this.off("click", selector);
Mousetrap.unbind(keys);
return this;
};
通过这种方式,我将以调用
on()
和off()
函数的相同方式调用它。通过这种方式,如果“this”是一个随机添加的元素,它将不会被激发,否?您只能在已经创建的元素上运行方法(也可以从插件)。因此,如果要在动态创建的元素上使用.on()
,则必须将选择器
作为字符串参数添加到插件调用中。明白了,所以我应该使用“this”而不是$(“body”)并将var选择器作为选择器。感谢投票被否决的原因是1。不能将事件附加到动态添加的元素。@FezVrasta的所作所为在这方面没有问题。2. $第2行中的(this)是浪费,并且会降低性能,因为在本例中,this已经是jQuery对象。通过检查,我们的目的不是为OP提供一个完全重写的插件。我把这件事留给OP去调查一件你应该快速解决的事情是$(“body”)。关闭('click',this)代码>我不确定插件是否总是引用ID为的元素。在这种情况下,您的解决方案不正确。@FezVrasta同意,已修复错误@devnull69否不要求元素#click
应该存在。调用$('#click')
else以附加事件需要存在。在
上,现在不强制存在。