我坐在下面的代码片段前几个小时,无法让它像我想的那样运行。
基本上,此代码会在右键单击时创建导航菜单,但单击切换器应关闭此功能,然后在下一次单击时再次打开。
一切正常(就像预期的那样),只是第12行的if if语句(如果(切换器%2 == 0))不能像预期的那样工作,这意味着无论var切换器是偶数还是甚至不。我还尝试了其他条件,如“> 0”等等,但其中的代码总是被执行。
$(document).ready(function () {
/* Set switcher to zero */
switcher = 0;
/* If switch gets clicked increment var switcher*/
$('#guidenavschalter').click(function () {
switcher++;
return false;
});
/* If var switcher is even execute following code, if not do nothing of this*/
if (switcher % 2 == 0) {
/* do not display right click browser menu */
document.oncontextmenu = function () {
return false;
};
/* if click within #page excluding area of #newid */
$('#page:not(#newid)').mousedown(function (e) {
/* if right click */
if (e.button == 2) {
/* if #newid already exist display it again */
if ($('#newid').length) {
$('#newid').css({
"display": 'block'
});
$('#newid').css({
"top": e.pageY + 'px'
});
$('#newid').css({
"left": e.pageX + 'px'
});
/* if it does not exist create and display #newid */
} else {
var $div = $('#block-bookoblock-book-outline').clone().attr('id', 'newid');
$('body').append($div);
$('#newid').css({
"top": e.pageY + 'px'
});
$('#newid').css({
"left": e.pageX + 'px'
});
$('#newid').css({
"position": 'absolute'
});
return false;
}
}
/* if left click hide #newid */
if (e.button == 0) {
$('#newid').css({
"display": 'none'
});
}
return true;
});
}
});
答案 0 :(得分:3)
您的代码基本上是
switcher = 0;
... some irrelevant code here (the callback is not executed right now)
if ( switcher % 2 == 0 ) {
所以难怪测试总是通过。
您可能想要的是将if
置于回调中,以便每次点击时对其进行测试:
var switcher = 0;
$('#guidenavschalter').click(function(){
switcher++;
if ( switcher % 2 == 0 ) {
...
}
return false;
});
答案 1 :(得分:1)
switcher = 0; // created outside the click event handler
并且您在click事件处理程序中增加了值。因此它始终为零。
通过评论,您有兴趣了解有关可变范围的更多信息
查看此SO answer
答案 2 :(得分:0)
我不认为条件switcher % 2 == 0
在这里有问题。
如果是true,你已经挂钩事件,但是有一个Else语句解开这些事件,以便恢复原始功能吗?即右键单击创建默认上下文菜单。
<强>更新强>
要恢复原始功能,请致电
document.oncontextmenu = null;
在其他部分。
此外,您只需要定义$('#page:not(#newid)').mousedown(function (e) {
一次(在if / else之外),然后使用切换器变量来确定是否调用该功能。
简而言之,您需要以下
$(document).ready(function () {
/* Set switcher to zero */
switcher = 0;
/* If switch gets clicked increment var switcher*/
$('#guidenavschalter').click(function () {
switcher++;
return false;
});
document.oncontextmenu = function() {
if ( switcher % 2 == 0 ) {
return false;
} else {
return true;
}
};
/* if click within #page excluding area of #newid */
$('#page:not(#newid)').mousedown(function (e) {
if (switcher % 2 == 0) {
// do stuff
} else {
// do nothing
}
});
});