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