javascript如果条件不起作用?

时间:2013-07-23 10:24:47

标签: javascript jquery

我坐在下面的代码片段前几个小时,无法让它像我想的那样运行。

基本上,此代码会在右键单击时创建导航菜单,但单击切换器应关闭此功能,然后在下一次单击时再次打开。

一切正常(就像预期的那样),只是第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;
        });
    }
});

3 个答案:

答案 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事件处理程序中增加了值。因此它始终为零。

您应该通过Scoping in JavaScript

通过评论,您有兴趣了解有关可变范围的更多信息

查看此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
        }
    });

});