2013-07-23 6 views
-1

Я сижу как часы перед следующим фрагментом кода и не могу заставить его работать, как я хочу.javascript, если условие не работает?

В основном этот код создает меню навигации по правому клику, но щелчок на коммутаторе должен отключить эту функцию, а при следующем нажатии он снова включается.

Все работает нормально (как и ожидалось), только инструкция if (строка) (строка (2)) работает не так, как ожидалось, что означает, что код внутри него всегда выполняется, независимо от того, или даже нет. Я также пробовал другие условия, такие как «> 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, которая отцепляет эти события, чтобы возобновить исходную функциональность? т.е. щелкните правой кнопкой мыши, создайте контекстное меню по умолчанию.

Update:

Чтобы возобновить первоначальную функциональность, вызовите

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 Kess - это то, что называется scope. – 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 Switcher, но перед тем, как его нажимают, регулярное поведение должно отображать собственное меню навигации по правому щелчку, если swithcer получает щелчок, выключается и настраивается в обычном меню браузера, при следующем нажатии включается собственное навигационное меню и т. д. –

Смежные вопросы