如何在同一个函数中访问变量集

时间:2014-10-02 05:48:27

标签: jquery codeigniter

我正在尝试创建一个可排序列表,然后将其传递给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>

2 个答案:

答案 0 :(得分: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();
    });
});

答案 1 :(得分:0)

问题在于,您再次将var postData $( "#sortMe" ).sortable置于postData内,这使postData成为局部变量而非全局变量,因为您将$( "#sortMe" ).sortable({ update: function(event, ui) { postData = $(this).sortable('toArray'); //<----- change here $( "#sortMe" ).disableSelection(); //$.post("do_finishcreate", {var: postData}); } }); 视为全局变量不要再次初始化并更正您的代码,如下所示: -

{{1}}