2014-10-02 84 views
0

我想創建一個可排序的列表,然後將它傳遞給Codeigniter中的我的控制器。我可以看到變量被設置,但是當我嘗試從.submit(函數)訪問它時,它不在那裏。我如何訪問設置在相同功能的變量

這是代碼。我正在設置postData並嘗試稍後訪問它。 感謝您的幫助:

<script> 
$(window).load(function() { 
var postData = ''; 
    $("#sortMe").sortable({ 
     update: function(event, ui) { 
      var postData = $(this).sortable('toArray'); 
      $("#sortMe").disableSelection(); 
      //$.post("do_finishcreate", {var: postData}); 
     } 
    }); 

    $("#draft_order").submit(function(event) { 
     var draftData = postData; 
     console.log(draftData); 
     alert ("test" + draftData); 
     event.preventDefault(); 
    }); 
}); 

</script> 

回答

0

的問題是,你再intialising var postData$("#sortMe").sortable其正在postData局部變量,而不是全局變量,因爲你正在postData全球,所以不要再intialise它和更正你的代碼,如下所示: -

$("#sortMe").sortable({ 
    update: function(event, ui) { 
    postData = $(this).sortable('toArray'); //<----- change here 
    $("#sortMe").disableSelection(); 
    //$.post("do_finishcreate", {var: postData}); 
    } 
}); 
+0

謝謝你,爲我工作。當我嘗試第一個例子時,我收到了一個對象而不是數組的警告。這是爲什麼?我剛開始學習jquery,只是試圖把我的頭圍繞它。 – Model359 2014-10-02 13:17:01

+0

@ Model359 ...而不是提醒它..嘗試console.log(),然後檢查瀏覽器控制檯..它應該是一個數組在我看來。 – 2014-10-02 13:54:47

+0

是的,它看起來像一個console.debug – Model359 2014-10-02 16:18:01

1

的問題是,因爲你已經使用的更新處理var postData,它成爲一個局部變量,將只能訪問內部的更新處理。

一個可能的解決方案是從更新處理程序中刪除var,以便您可以更新window.load處理程序中聲明的閉包變量。

但我覺得沒有必要用太...你可以閱讀在提交處理程序值一樣

$(window).load(function() { 
    $("#sortMe").sortable({ 
     update: function (event, ui) { 
      $("#sortMe").disableSelection(); 
      //$.post("do_finishcreate", {var: postData}); 
     } 
    }); 

    $("#draft_order").submit(function (event) { 
     //read in the submit handler, no need to do it in the update hadnler 
     var draftData = $('#sortMe').sortable('toArray'); 
     console.log(draftData); 
     alert("test" + draftData); 
     event.preventDefault(); 
    }); 
});