2013-01-14 89 views
0

我有一個簡單的jsfiddle其中我得到一個div的值。爲什麼我的變量值改變了?

$(document).ready(function(){})部分,我得到了div的正文。當我嘗試在函數中稍後使用該值時,值會更改(除非我添加.innerHTML)。爲什麼變量的值會改變?換句話說,爲什麼當我稍後調用該變量時需要添加.innerHTML

謝謝!

<div id="my_div">1</div> 

// Javascript/JQuery 

$(document).ready(function(){ 
    var my_div = $("#my_div").text(); 

     alert(my_div); 

     func(); 
    }); 


function func(){  
    alert(my_div); // why does the value change here...why??? 
     alert(my_div.innerHTML); // why do I need ".innerHTML' here??? 
}; 
+0

爲什麼這得到downvoted? –

回答

2

由於您未請求div的任何特定「功能」,因此值發生更改。你只是想提醒一個元素...

在第一個位中,你已經在函數內部分配了my_div。 如果將var my_div移到該函數的外部,它將成爲一個全局變量,而不是本地變量。

編輯小提琴:here

+1

我認爲值得一提的是他最初的例子提醒div元素,因爲'window.my_div'實際上是通過ID的元素。 –

2

因爲你聲明my_div沒有在全球範圍內。

你應該這樣做:

var my_div; 
$(document).ready(function(){ 
    my_div = $("#my_div").text(); 

    alert(my_div); 

    func(); 
}); 
+1

感謝您的答案。是一個非常明確的解釋。接受chrisbradbury,因爲他比你快一點。再次感謝! –

+0

@ Mr.Gaga:好的沒問題:) – dynamic

2

這是因爲與ID的所有元素都默認了全球範圍內的性能。

因此,您的function func()基本上my_div與致電window.my_div相同。

嘗試刪除var my_div = $("#my_div").text(),您仍然可以在func()中使用它。

這一問題與Do DOM tree elements with ids become global variables?

1
$(document).ready(function(){ 
var my_div = $("#my_div").text(); 

    alert(my_div); 

    func(my_div); 
}); 


function func(my_div){  
    alert(my_div); // why does the value change here...why??? 
}; 

你需要參考my_div通過。

0

當你做到以下幾點:

function func(){  
    alert(my_div); // why does the value change here...why??? 
    alert(my_div.innerHTML); // why do I need ".innerHTML' here??? 
}; 

你得到一個HTML元素通過它的ID(my_div)。
爲什麼?因爲my_div未聲明爲全球。
這就是爲什麼當你提醒你得到一個對象。

嘗試使用其他名稱my_div,像運行代碼:

$(document).ready(function(){ 
    var div = $("#my_div").text(); 

    alert(my_div); 

    func(); 
}); 


function func(){ 
    alert(div); 
    alert(div.innerHTML); 
}; 

你會看到你收到以下錯誤:

Uncaught ReferenceError: div is not defined 
+0

其實''my_div'''被聲明爲全局的;)看到我的答案 – drinchev

相關問題