2012-02-28 5 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); 

} 

});

Я объявлял $ select как глобальную переменную, но по какой-то причине, когда она находится внутри функции, ширина или высота не изменяются (размер изменения выбора): , если я делаю следующее, он работает :

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

      }) 

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

Я очень ценю, если кто-то понимает, что происходит, и может сказать мне, я пытался понять это, но я действительно изо всех сил. Огромное спасибо

ответ

2

Когда вы переносите $ image с помощью $ selection, div теперь представляет собой новый объект (копию $ selection) в DOM, а не фактический отсоединенный элемент в памяти. Попробуйте изменить на это:

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

согласен .. или просто цепочка родителя() после обертки – charlietfl

+0

Да, цепочка была бы хорошей. Я просто хотел оставить исходную строку без изменений, как точку ссылки на позицию в исходном коде. –

+0

Я пробовал это раньше, и это работает, я просто не могу понять, почему я не могу использовать $ selection из-за обертки? ... – MariaZ

1

Вы не объявляете его глобальным - вы объявляете его в рамках функции, выполняемой при document.ready. В идеале положите var $selection до document.ready и удалите var, когда вы обратитесь к нему внутри этой функции. Это сделает его глобальным.

+0

Это правда, что это не глобально, но все места, которые его используют, также находятся в документе document.ready, поэтому он находится в области видимости. – nnnnnn

+0

поэтому, когда вы говорите, что находится в области видимости, вы хотите, чтобы он все еще работал, или мне нужно поместить эту переменную за пределы документа. – MariaZ

+0

Я имею в виду, что объявление переменной для '$ selection' не нужно перемещать за пределы document.ready, потому что оно будет« работать »в том смысле, что оно доступно там, где оно есть. Проблема, с которой вы сталкиваетесь, не связана с этим (Джейк объяснил проблему _real_). – nnnnnn

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