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)
的孩子,它就不会了。我的问题不太准确,抱歉。但我失败了