2012-02-28 116 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