2014-10-27 115 views
3
$(document).ready(function() { 

    var x = ""; 

    $("#anyElement").click(function() { 
     x = "test"; 
     alert(x); 
    }); 

    alert(x); 
}); 

當第一次警報的作品,消息框,顯示「測試」。當第二次提醒工作時,messagebox顯示「」。如何在點擊事件中設置全局變量?

$("#anyElement").click(function() { 
    // How can i set the x veriable as "test" here 
}); 
+2

全局是壞 – morissette 2014-10-27 19:54:51

+2

代碼看起來很好......你肯定第一個警報沒有'「」'? – tymeJV 2014-10-27 19:55:11

+0

這是由於變量的範圍。 – 2014-10-27 19:55:53

回答

0

您所遇到的問題是因爲節目的流程。您對變量x的聲明使x全局並限定爲document.ready函數。

「測試」沒有分配到x變量,直到點擊事件後第一個警報居然是寫在代碼的第二警報,因爲沒有與警報關聯的事件。

+0

只是挑剔的...如果x的範圍有限,那麼它不是全球性的。如果你在document.ready之外嘗試'alert(x)',你會得到未定義的。 – 2014-10-27 20:04:30

+0

同意大聲笑 - 很nitpicky – morissette 2014-10-27 20:06:43

0

您的代碼工作正常,第一次警報是空的,因爲點擊觸發條件沒有被調用:

FIDDLE

$(document).ready(function() { 

    var x = ""; 

    $("#anyElement").click(function() { 
     x = "test"; 
     alert(x); 
    }); 

    alert(x); 
}); 
0

我不知道如果我理解你有什麼要求,但是,嘿,讓我們避免全局,好嗎?

這就是說,我會建議你去嘗試這樣的做法:

var app = {}; 
app.x = 'initial value'; 

app.bindEvents = function() { 
    $('#anyElement').click(function() { 
     app.x = 'test'; 
     console.log(app.x); 
    });  
}; 
app.bindEvents = function() { 
    app.bind(); 
}; 
$(app.init); 

在這裏,我們的代碼只設置一個全局對象(app),避免污染命名空間。 你的代碼中的問題是你試圖設置一個「全局」,但x不是一個全局的,而只是一個局部變量。

見工作JSFiddle here

+0

謝謝你的回答,:) – Ahmet 2014-10-27 20:19:02