2010-07-26 55 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

考慮通過jQuery的data()方法將其存儲在document - 全局變量總是令人討厭維護。

$(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 2010-07-26 14:25:22

+0

編輯:看下面的答案,評論不喜歡的代碼。這取決於Marcel J的想法。 – cdutson 2010-07-26 15:04:27

+0

當我嘗試這個,我得到了一個未定義$( 「.soft_add_wrapper」).draggable({停止:函數(事件,UI){$( '#文本框軟左')VAL($( 「UI,可拖動」 ).css('left')); $('#textfield-soft-left').val($(「。ui-draggable」).css('top')); alert($('#textfield-軟左')VAL()); – user357034 2010-07-26 16:49:14

1

當你把你的事件處理程序的功能是不是已經打電話soft_top沒有設置,因爲它會在功能設置可以設置當事件被觸發將CAL。它會在你第一次拖動東西時被設置。

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

這是馬塞爾·J的回答擴展

如果你想使用的數據系統

,以下是好開始:

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 W上。

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');} 
}