即使经过if语句测试,函数一旦被调用就会持续存在

时间:2015-07-22 18:57:38

标签: javascript jquery

我们在div中有多个跨度。当用户单击空格时,我们希望跨度恢复为原始布局。这是代码:

var whiteSpace = function (){

  $(function(){
    $('div').on('click',function(e) {
      if (e.target !== this)
        return;
      originalL();
    });
  });
};

问题是我们有两种模式,工作模式和设置模式,我们希望这只能在工作模式下工作。我们用按键改变模式,

$(document).on("keypress", function (e){
  if(e.which === 83) {
    alert('"Shift + s" was pressed.  Start Setup Mode.');
    state = "false";
    dragResize();
   var whiteSpaceDisable = function (){
      $(function(){
        $('div').off('click',function(e) {
          if (e.target !== this)
            return;
          originalL();
        });
      });
    };
    whiteSpaceDisable();
  }

  if(e.which === 87) {
    alert('"Shift + w" was pressed.  Start Work Mode.');
    state = "true";
    dragDropWidget ();
    dragResizeDisable();
   whiteSpace = function (){

      $(function(){  
        $('div').on('click',function(e) {
          if (e.target !== this)
            return;
          originalL();
        });
      });
    };
    whiteSpace();
  }
});

当用户第一次尝试从工作模式进入设置模式时,它可以正常工作。但是,当用户第二次尝试同样的事情时,它不起作用。 WhiteSpace功能仍然存在。 如何在设置模式下关闭此功能?顺便说一句,页面重新加载不是一个选项。非常感谢你!

2 个答案:

答案 0 :(得分:2)

在你的按键处理程序中,替换:

var whiteSpace = ...

使用:

whiteSpace = ...

现在,您只需将另一个函数分配给 new whiteSpace变量,该变量的作用域是该按键处理函数。如果要覆盖先前定义的whiteSpace变量,则需要确保实际分配给相同的变量引用,而不是创建新变量。

答案 1 :(得分:0)

通过在originalL函数中放置'if conditional'解决问题,因此它将在触发前进行评估。这就是问题所在 我们刚刚制作了一个'workMode'变量,可以通过按键功能设置为我们需要的任何值。
这是修复它的代码:

var workMode = "off";
function originalL() {
if (workMode === "on"){
small1O();
small2O();
smalllongO();
smallwideO();
}
};

并在页面底部,在按键听众处,放置:

$(document).on("keypress", function (e) {

if (e.which === 83) {

    alert('"Shift + s" was pressed.  Start Setup Mode.');
    workMode = "off";
    dragResize();
    originalL();
}
;
if (e.which === 87) {

    alert('"Shift + w" was pressed.  Start Work Mode.');
    workMode = "on";
    smalllongExpand();
    originalL();
    dragResizeDisable();
}