У меня есть следующий код 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) в другой функции, это также не работает. Я понимаю и читал о области видимости, глобальной переменной и всем этом злом. Некоторая помощь будет отличной !!

0
user357034 26 Июл 2010 в 18:08

5 ответов

Лучший ответ

Попробуйте сохранить его в document с помощью метода data() jQuery - глобальные переменные всегда раздражают в обслуживании.

$(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
3
Marcel Jackwerth 26 Июл 2010 в 15:31

Вы можете переместить область видимости переменной:

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
Mark Schultheiss 26 Июл 2010 в 14:22

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

1
Andreas Köberle 26 Июл 2010 в 14:12

Это проблема области видимости, и вы должны зарегистрировать переменные в окне.

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');}
}
0
Michael Sparks 26 Июл 2010 в 15:19

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

Если вы хотите использовать систему данных, хорошее начало:

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');
}
1
cdutson 26 Июл 2010 в 21:57