2013-07-23 45 views
-1

我坐在像下面的代碼片段前幾小時,不能讓它像我想要的那樣運行。javascript如果條件不起作用?

基本上這個代碼創建一個右鍵點擊的導航菜單,但點擊切換器應該關閉這個功能,並在下一次點擊它再次打開。

一切工作正常(如預期的),只是第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; 
     }); 
    } 
}); 
+1

這是'$( '#guidenavschalter')。click'事件被炒魷魚嗎?你可以放置一個console.log,看看切換器是否增加了? – mohkhan

+0

是的,它得到增加 –

回答

0

我不認爲這是條件switcher % 2 == 0這是有問題的在這裏。 如果是真的,你已經掛鉤了事件,但是是否有一個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 
     } 
    }); 

}); 
+0

我認爲這是我需要的,但我如何解鎖oncontextmenu和mousedown? –

+0

看到我更新的答案 –

+0

你真的搖滾,只需要到document.oncontextmenu功能更改爲以下: '\t \t document.oncontextmenu =函數(){ \t \t \t如果(切換%2 == 0){ \t \t \t \t return false; \t \t \t}其他{ \t \t \t \t迴歸真實; \t \t \t} \t \t};' –

1
switcher = 0; // created outside the click event handler 

,你就增加點擊事件處理程序內的值。因此它總是零。

你應該通過Scoping in JavaScript

從評論,您有興趣瞭解更多關於變量的作用域在Javascript然後

退房這個SO answer

+0

切換器得到增加,並在右鍵單擊功能內提醒var切換器的正確值,例如 –

+0

@Tobias凱斯稱爲範圍。 – Praveen

+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; 
}); 
+0

正是我想要的類型。這是目標。 –

+0

只是試了一下,一切都變得很奇怪,直到3點擊提到的條件內的東西得不到執行,之後它總是得到執行 –

+0

也許你還需要知道#page中有一個鏈接增加了var切換器,但在點擊之前,常規行爲應該顯示自己的導航菜單,右鍵單擊,如果swithcer被點擊,關閉和siplay常規瀏覽器菜單,在下一次點擊打開自己的導航菜單等 –