我们在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功能仍然存在。 如何在设置模式下关闭此功能?顺便说一句,页面重新加载不是一个选项。非常感谢你!
答案 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();
}