2012-02-28 95 views
1

我有下面的代碼jQuery的全局變量不工作

$(document).ready(function() { 
var $selection = $('<div class="image-selection" />') 
      .css({ 
       opacity : 0.5, 
       position : 'absolute' 

      }) 

var $content = $('.content'); 

$('img', $content).click(function(){selectItem($(this))}); 

function selectItem(itemSelected){  

    $image = itemSelected; 

    $image.wrap($selection); 

    $selection.width(150).height(150); 

} 

})的問題;

我聲明$選擇作爲全局變量,但由於某種原因,當它在一個函數中的寬度或高度不會改變(選擇的大小改變): 如果我做了以下,它的工作原理:

var $selection = $('<div class="image-selection" />') 
      .css({ 
       opacity : 0.5, 
       position : 'absolute' 

      }) 

var $content = $('.content'); 
$selection.width(150).height(150); 

如果一些人理解所發生的事情,可以告訴我,我會非常感謝,我一直在試圖弄明白這一點,但我真的很掙扎。 非常感謝你

回答

2

當您用$ selection包裝$ image時,div現在是DOM中的新對象($ selection的副本),而不是內存中實際斷開的元素。嘗試更改爲:

$image.wrap($selection); 
$image.parent('div.image-selection').width(150).height(150); 
+0

同意..或只是在包裝後鏈父母() – charlietfl 2012-02-28 00:16:10

+0

是的,鏈接會很好。我只是想在原來的代碼中保留原始的一行,作爲參考。 – 2012-02-28 00:17:46

+0

我試過之前,它的工作原理,我只是不明白爲什麼我不能使用$選擇,因爲包裝?... – MariaZ 2012-02-28 00:22:43

1

你沒有聲明它是全局的 - 你聲明它在document.ready執行的函數範圍內。理想情況下,在document.ready之前放var $selection,並在該函數內引用它時刪除var。這將使其成爲全球性的。

+0

這是真的,它不是全局的,但所有使用它的地方也在document.ready處理程序中,因此它在範圍內。 – nnnnnn 2012-02-28 00:14:59

+0

所以當你說這是在範圍內,你的意思是它仍然可以工作,或者我需要把這個變量放在document.ready之外嗎? – MariaZ 2012-02-28 00:17:44

+0

我的意思是'$ selection'的變量聲明不需要在document.ready之外移動,因爲它可以在可訪問的地方工作。你遇到的問題與此無關(傑克解釋了_real_問題)。 – nnnnnn 2012-02-28 01:24:19