2010-07-26 6 views
0

У меня есть следующий код JavaScript, который находится внутри функции, которую я пытаюсь получить, чтобы переменная soft_left и soft_top использовалась в других функциях. У меня очень мало успеха. Показан только соответствующий код.нужно использовать переменную внутри функции глобально

function drawCart() 
{ 
$(".soft_add_wrapper").multidraggable({"containment":"#content"}); 
$(".soft_add_wrapper").draggable({stop: function(event, ui) { 
    soft_left = $(".ui-draggable").css('left'); 
    soft_top = $(".ui-draggable").css('top');} 
} 

Когда я помещаю предупреждение (soft_top), как будто оно оповещает о значении.

$(".soft_add_wrapper").draggable({stop: function(event, ui) { 
     soft_left = $(".ui-draggable").css('left'); 
     soft_top = $(".ui-draggable").css('top'); 
     alert(soft_top);} 

Когда я помещаю предупреждение здесь, он ничего не делает.

function drawCart(index) 
{ 
$(".soft_add_wrapper").multidraggable({"containment":"#content"}); 
$(".soft_add_wrapper").draggable({stop: function(event, ui) { 
    soft_left = $(".ui-draggable").css('left'); 
    soft_top = $(".ui-draggable").css('top'); 
    } 
    alert(soft_top); 
} 

И, наконец, когда я пытаюсь предупредить (soft_top) в другой функции, он также не работает. Я понимаю и читал о масштабах и глобальной переменной и обо всем этом злом. Некоторая помощь будет большой!

ответ

3

Рассмотрите возможность хранения в document методом jQuery's data() - глобальные переменные всегда раздражают для поддержания.

$(document).data("myVar", 12345); 
$(document).data("myVar"); // returns 12345 

Отредактировано: Более конкретный пример:

// soft_left = $(".ui-draggable").css('left'); 
$(document).data("soft_left", $(".ui-draggable").css('left')); 

// get it somewhere else 
$(document).data("soft_left") 

И да, вы можете также использовать какой-то скрытый текст-поле - вы только потеряете тип. Просто используйте

$('#textfield-soft-left').val($(".ui-draggable").css('left')); 
$('#textfield-soft-left').val(); // returns a String 
+0

Звучит неплохо, но как бы я это сделал в этом случае? Могу ли я также поместить переменные в скрытое текстовое поле, а затем использовать их в функции? Просто мысль. – user357034

+0

изменить: посмотрите на ответ ниже, комментарии не нравятся. Это связано с идеей Марселя Дж. – cdutson

+0

Когда я пытаюсь это сделать, я получаю undefined $ (".soft_add_wrapper") .draggable ({stop: function (event, ui) {$ ('# textfield-soft-left'). Val ($ (". Ui-draggable") .css ('left')); $ ('# textfield-soft-left'). val ($ (". ui-draggable"). css ('top')); alert ($ ('# textfield- soft-left '). val()); – user357034

1

Когда вы добавляете обработчик событий, функция уже не звонила, а soft_top не был установлен, потому что она будет установлена ​​в наборе функций, когда будет запущено событие. Он будет установлен при первом перетаскивании.

1

Вы можете переместить сферу переменной:

var soft_left =""; 
var soft_top = ""; 
function drawCart(index) 
{ 
    $(".soft_add_wrapper").multidraggable({"containment":"#content"}); 
    $(".soft_add_wrapper").draggable({ 
     stop: function(event, ui) 
     { 
      soft_left = $(".ui-draggable").css('left'); 
      soft_top = $(".ui-draggable").css('top'); 
     } 
     alert(soft_top); 
    }); 
}; 
1

Это расширение на ответ Марселя Джея

, если вы хотите использовать систему данных, следующее является хороший старт:

function drawCart(index) 
{ 
    $(".soft_add_wrapper").multidraggable({"containment":"#content"}); 
    $(".soft_add_wrapper").draggable({stop: function(event, ui) { 

    /* I think ui.helper will give you the object reference: http://docs.jquery.com/UI/Draggable. My example uses $(this) just in case */ 
    $(this).data('soft_left', $(".ui-draggable").css('left')); 
    $(this).data('soft_top', $(".ui-draggable").css('top')); 
    })); 
    alert($(".soft_add_wrapper").data('soft_top'); 
} 
0

Это проблема сфера действия, и вы должны зарегистрировать переменные с помощью windo ш.

function drawCart() { 
    $(".soft_add_wrapper").multidraggable({"containment":"#content"}); 
    $(".soft_add_wrapper").draggable({stop: function(event, ui) { 
    window['soft_left'] = $(".ui-draggable").css('left'); 
    window['soft_top'] = $(".ui-draggable").css('top');} 
} 
Смежные вопросы