2016-03-18 3 views
0

У меня проблема с областью переменной в кодеJavascript и JQuery Дом глобальной переменной Scope

var ButtonPressed; //global SCOPE 
$(document).ready(function() 
{ 

    function messageAlert() 
    { 
    $('#buttons').append('<input type="button" id="btn" value="Clickme" />'); 
    return false; 
    } 

    messageAlert(); 

    $('#btn').on("click", function() 
    { 
    ButtonPressed = 1; 
    }); 
}); //end document 

//// UNDEFINED NOT WORKING 
if (ButtonPressed === 1) 
{ 
    alert(ButtonPressed); 
} 

Я стараюсь все о размахе учебники, но я не могу показать переменную ButtonPressed=1 GLOBAL.

Любая помощь?

+2

Это 'if' заявление фактически находится после' $ (документ) .ready() 'оператор? В этом случае он никогда не отобразит предупреждение, так как этот код всегда будет запущен до того, как кнопка будет нажата. – mikeyq6

+0

Что вы пытаетесь сделать? – putvande

+0

просто назначьте значение по умолчанию переменной ButtonPressed, например: 'var ButtonPressed = 0;' –

ответ

2

Вы привязываете событие click к кнопке #btn, чтобы установить глобальную переменную ButtonPressed, которая не будет запущена, если вы не нажмете кнопку.

Когда код выполняется и достигает блок (который находится в глобальном масштабе), зная, что кнопка не была нажата

if (ButtonPressed === 1) 
{ 
    alert(ButtonPressed); 
} 

Переменная ButtonPressed не будет установлена, потому что вы не нажали кнопку поэтому он не будет предупреждать о каком-либо сообщении.

Другими словами, если оператор работает до обработчика щелчка

0

Объясняя свой код. выполнение идет этот путь (1) -> (2) -> (3)

var ButtonPressed; // executed as soon as the script tag is hit -- (1) 

    $(document).ready(function() 
    { 
    //......   //executed ONLY AFTER the DOM is ready - (3) 
    }); 


    if (ButtonPressed === 1) //executed as soon as the script tag is hit - (2) 
    { 
     alert(ButtonPressed); 
    } 

как комментарии указывают, то var ButtonPressed выполняется первое, то выполнение переходит к if проверки. Только после того, как DOM будет полностью готов, ваш кодовый блок внутри $(document).ready будет выполнен.

Так что означает, что все глобальные масштабы кода вещи будут выполнены первым, а затем один внутри документа готовые


1) Если вы задумали Показывать уведомление, когда когда-либо кнопка щелкнул затем сделать это

$('#btn').on("click", function() 
    { 
    ButtonPressed = 1; 
    alert(ButtonPressed); 
    // do all the stuff that should happen when a button is clicked 
    }); 

2) Если у вас есть намерение сделать Проверьте, была ли нажата кнопка ??, то вы можете использовать setInterval. используя это, вы можете проверить, была ли нажата кнопка или нет, за каждые 1 секунду. Как показано ниже.

var checkButtonStatus = setInterval(function(){ 
       if (ButtonPressed === 1) 
       { 
        alert(ButtonPressed); 
        //do all your stuff as the button was clicked 
        clearInterval(checkButtonStatus); // remove interval as you don't need to check again. 
       } 

       }, 1000); 

Примечание:I would say option 2 is not efficient way of doing it, Go for option 1

+1

Как это отличается от того, что KAD объяснил в своем ответе? – putvande

+0

Как объясняется, я не думаю, что новичок сможет лучше понять ответ KAD, он звучит немного высокого уровня. Поэтому я объясняю как можно меньше –

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