1

帮我用这个小提琴

正如您在标题中看到的那样,我在一个元素上有两个功能,我想禁用一个,而另一个正在运行。

function SetupClick() {
$("#Wp").toggle(function(){
    $("#Wp").animate({"width":"500"},"slow");
},function(){
    $("#Wp").animate({"width":"100"},"slow");
});
}

function SetupMouseover() {
$("#Wp").mouseenter(function(){
    $("#Wp").animate({"width":"500"},"slow");
        });
            $("#Wp").mouseout(function(){
    $("#Wp").animate({"width":"100"},"slow");
        });
}

$('#Ck').click(function() {
  SetupClick();
  // Optionally, save choice
  localStorage['userchoice'] = 'click';
});
$('#Me').click(function() {
  SetupMouseover();
  // Optionally, save choice
  localStorage['userchoice'] = 'mouseover';
});
4

3 回答 3

1

user136etcetc 提供了一个很好的链接来描述 jQuery 中的事件命名空间。这是您的示例,在实践中使用命名空间:

http://jsfiddle.net/4vST2/

var aniMinWidth = 100;
var aniMaxWidth = 500;

function SetupClick() {
    // Remove mouse events first
    $("#Wp").off("mouseout.bobsyouruncle");
    $("#Wp").off("mouseenter.bobsyouruncle");

    $("#Wp").on("click.bobsyouruncle", function() {
        var animateWidth = $(this).width() > aniMinWidth ? aniMinWidth : aniMaxWidth;

        $(this).animate({"width":animateWidth}, "slow");
    });  
}

function SetupMouseover() {
   // Remove click event first
  $("#Wp").off("click.bobsyouruncle");

  $("#Wp").on("mouseenter.bobsyouruncle", function(){
        $("#Wp").animate({"width":aniMaxWidth},"slow");
   });

   $("#Wp").on("mouseout.bobsyouruncle", function(){
        $("#Wp").animate({"width":aniMinWidth},"slow");
    });
}

$('#Ck').click(function() {
  SetupClick();
  // Optionally, save choice
  localStorage['userchoice'] = 'click';
});
$('#Me').click(function() {
  SetupMouseover();
  // Optionally, save choice
  localStorage['userchoice'] = 'mouseover';
});
于 2013-06-20T17:36:14.560 回答
1

这是禁用事件处理程序的链接,希望对您有所帮助

在 jQuery 中删除事件处理程序的最佳方法?

于 2013-06-20T17:25:06.163 回答
0

我认为您不能禁用事件处理程序,但您可以将变量设置为要执行的函数的名称,然后在每个函数中对其进行测试并采取相应措施。

var MYNAMESPACE = {}
MYNAMESPACE.activeFunction = 'click'

function SetupMouseover() {
  if MYNAMESPACE.activeFunction != 'mouseover') {return}
  // rest of code here
}

使用 $(selector).off() 实际上删除了点击处理程序。如果要使用它,则必须在两个事件处理程序之间切换。

MYNAMESPACE.toggleHandlers = function(h) {
  if (h === 'click') {
    removeMouseover();
    SetupClick();
  }
  else if (h === 'mouseover') {
    removeClick();
    SetupMouseover();
  }
}
于 2013-06-20T17:28:13.227 回答