Jquery 防止函数执行两次
我第一次制作自己的函数Jquery 防止函数执行两次,jquery,function,Jquery,Function,我第一次制作自己的函数$.fn.testing=function(){….} 但是我有一个我还不能解决的问题。下一个场景并不明智,但它可能会发生,所以这就是我想要修复它的原因,这样用户就不必: $('.target').testing("message" : "Hello!"); $('#test .target').testing("message" : "Hello world!"); 该功能将弹出“消息”。因此,这里用户想要的是,对于每个.target都必须有一个带有“Hello!”的弹
$.fn.testing=function(){….}
但是我有一个我还不能解决的问题。下一个场景并不明智,但它可能会发生,所以这就是我想要修复它的原因,这样用户就不必:
$('.target').testing("message" : "Hello!");
$('#test .target').testing("message" : "Hello world!");
该功能将弹出“消息”。因此,这里用户想要的是,对于每个.target
都必须有一个带有“Hello!”的弹出框,如果这个.target
也有一个id为#test
,那么它应该弹出:“Hello world!”。但问题是,现在当触发.target#test
时,脚本将弹出“Hello!”和“Hello world!”
因此,我想在我的函数中看到的是,函数是否已经在此对象上调用了函数,如果是,则必须.unbind()
上一个函数,然后继续添加该函数
我怎样才能做到这一点?希望我的解释足够清楚
(上面的例子有点简化,所以请不要评论它的使用)
谢谢你的帮助 你可以做:
$('.target#test').testing("message" : "Hello world!");
$('.target:not(#test)').testing("message" : "Hello!");
编辑-你的意思是这样的吗
$('.target').testing(function(e){
if (this.id === 'event'){
alert('hello world');
}else{
alert('hello');
}
});
你可以做:
$('.target#test').testing("message" : "Hello world!");
$('.target:not(#test)').testing("message" : "Hello!");
编辑-你的意思是这样的吗
$('.target').testing(function(e){
if (this.id === 'event'){
alert('hello world');
}else{
alert('hello');
}
});
试试这个
var $this. msg;
$('.target').each(function(){
$this = $(this);
if((#this.attr("id) != "#test") || ($this.find("#test").length == 0))//here check for all the possible ids you want){
msg = "message" : "Hello world!";
}
else{
msg = "message" : "Hello!";
}
$this.testing(msg);
});
试试这个
var $this. msg;
$('.target').each(function(){
$this = $(this);
if((#this.attr("id) != "#test") || ($this.find("#test").length == 0))//here check for all the possible ids you want){
msg = "message" : "Hello world!";
}
else{
msg = "message" : "Hello!";
}
$this.testing(msg);
});
据我所知:例如,您在target元素后附加了一个target上的弹出窗口,现在该弹出窗口是target的子对象,或者您可以以其他方式实现。我的意思是,每当调用函数时,它都会检查弹出窗口是否插入到DOM中。如果它是第一个,它将删除该弹出窗口,然后插入一个新的带有新消息的弹出窗口 我是说像
function() {
//if a pop is present
$('.popup').remove();
var msg = $(this).attr('title'); //for example
var popup = "html containin msg...";
$(this).append(popup);
}
据我所知:例如,您在target元素后附加了一个target上的弹出窗口,现在该弹出窗口是target的子对象,或者您可以以其他方式实现。我的意思是,每当调用函数时,它都会检查弹出窗口是否插入到DOM中。如果它是第一个,它将删除该弹出窗口,然后插入一个新的带有新消息的弹出窗口 我是说像
function() {
//if a pop is present
$('.popup').remove();
var msg = $(this).attr('title'); //for example
var popup = "html containin msg...";
$(this).append(popup);
}
以下是我将如何做到这一点:
var _myFunction = function() {
alert($(this).data("message"));
};
在插件中,您可以这样做
jQuery.fn.testing = function(msg) {
this
.data("message", msg)
.unbind('click', _myFunction)
.bind('click', _myFunction);
};
编辑:这里是中的一个示例,下面是我如何做到这一点的:
var _myFunction = function() {
alert($(this).data("message"));
};
在插件中,您可以这样做
jQuery.fn.testing = function(msg) {
this
.data("message", msg)
.unbind('click', _myFunction)
.bind('click', _myFunction);
};
编辑:这里有一个例子,我不知道这是不是正确的方法,但我自己做的。这很简单,只需在自己函数的开头添加
$(this).unbind()
。它将删除以前添加的所有函数,并继续添加当前函数。我以前尝试过它,但使用了一个额外的选择器:$(this).unbind(“.testing”)
,由于某种原因,它不起作用,但现在我让它起作用了
谢谢你的回答和帮助!真的很感激 我不知道这是不是正确的方法,但我自己解决了。这很简单,只需在自己函数的开头添加
$(this).unbind()
。它将删除以前添加的所有函数,并继续添加当前函数。我以前尝试过它,但使用了一个额外的选择器:$(this).unbind(“.testing”)
,由于某种原因,它不起作用,但现在我让它起作用了
谢谢你的回答和帮助!真的很感激 这确实很有帮助,但是用户必须指定这一点。在函数内部是否有这样做的方法?我已经编辑了主要帖子,请参阅代码位,您现在将如何实现它?顺便说一下,谢谢你的回答,如果函数中没有可能实现这一点的方法,那么我将使用这个!谢谢你能提供一个更详细的例子吗?比如向我们展示你函数的代码,否则我们无法正确理解你想要实现的目标。也许可以在jsfiddle.netThanks上发布一个示例,以获得帮助。我已经弄清楚了(见下面我的答案)。但还是要感谢你的努力!这确实很有帮助,但是用户必须指定这一点。在函数内部是否有这样做的方法?我已经编辑了主要帖子,请参阅代码位,您现在将如何实现它?顺便说一下,谢谢你的回答,如果函数中没有可能实现这一点的方法,那么我将使用这个!谢谢你能提供一个更详细的例子吗?比如向我们展示你函数的代码,否则我们无法正确理解你想要实现的目标。也许可以在jsfiddle.netThanks上发布一个示例,以获得帮助。我已经弄清楚了(见下面我的答案)。但还是要感谢你的努力!这确实可行,但我希望它发生在函数本身内部。这只是一个简单的例子,但如果它变得更高级,您可能必须使用类似于:
$('.target').filter(:not(#test#test1#test2#test3#test4#test5#test6#test7#test8#test9#test10等)。测试(“消息”:“你好!”)代码>我已经编辑了主要帖子,看到代码位,你现在将如何实现它?谢谢你的回答,顺便说一句!谢谢,这确实会有帮助,但如果id
是$(this)
的孩子,它就不会了。我的问题不太准确,抱歉。但我已经搞定了。谢谢你的帮助!那确实有效!谢谢你的帮助。但是只需添加$(this).unbind()
就更容易了,所以我将使用:)这确实可行,但我希望它发生在函数本身内部。这只是一个简单的例子,但如果它变得更高级,您可能必须使用类似于:$('.target').filter(:not(#test#test1#test2#test3#test4#test5#test6#test7#test8#test9#test10等)。测试(“消息”:“你好!”)代码>我已经编辑了主要帖子,看到代码位,你现在将如何实现它?谢谢你的回答,顺便说一句!谢谢,这确实会有帮助,但如果id
是$(this)
的孩子,它就不会了。我的问题不太准确,抱歉。但我失败了