简短说明 我正在使用jquery,jqueryUI和ajax。
我使用val()在第一次完美地从字段中获取值 但如果我更改字段中的值,则值保持不变。
详细描述 我正在开发一个我在这个项目上工作了2年的大项目 我的头在抽! ;)
我有这样的事情:
这是div的html:
<div id="add_task_diag" style="display: none">
<label for="task">Task : </label><input id="taskfrm" label="Task" value="task" name="taskval" placeholder="e.g fill in tax form" />
<button value="submit" class="btn btn-large add_task_frm">Add task</button> <button class="btn btn-large cancel_add_task">Cancel</button>
</div>
<button class="btn btn-primary" id="add_task"><i class="icon-file icon-white"></i> Add Todo</button>
这是剧本:
<script>
$(".add_task_frm").click(function() {
function taskgen() {
var data = "task=" + $("#taskfrm").val();
alert(data); // only for debuging
var task_data = data;
alert(task_data); // only for debuging
$.post("whereitneedtogo.php?task=action80", task_data), //this is the ajax part
$("#add_task_diag").dialog("destroy"); // I had here close I changed it to "destroy"
task_data = undefined; //I tried to unset the variable
}
taskgen();
});
</script>
当我运行它时一切正常!当我重新发送另一个值时,变量保持不变。例如,如果我在第二次测试中将test123放入现场,它将保持test123 我需要重新加载页面来重置变量。
我不想使用location.reload()
此文件长度超过1700行,但这是问题所在的部分。
我尝试了很多类似的事情: - 在Dom准备好之后设置我的脚本 - 将我的变量设置为undefined或null - 销毁jquery选项卡 - 似乎对我有用的唯一部分是location.reload,但我的应用程序是完整的ajax。
感谢帮助,我希望这是一个愚蠢或简单的。
答案 0 :(得分:1)
为什么每次单击时都尝试声明并调用该函数..尝试将其移动到click事件处理程序之外..
<script>
$(".add_task_frm").click(function() {
taskgen();
});
function taskgen() {
var data = "task=" + $("#taskfrm").val();
alert(data); // only for debuging
var task_data = data;
alert(task_data); // only for debuging
$.post("whereitneedtogo.php?task=action80", task_data), //this is the ajax part
$("#add_task_diag").dialog("destroy"); // I had here close I changed it to "destroy"
task_data = undefined; //I tried to unset the variable
}
</script>
当您想从其他地方调用taskgen()时,您可能还会遇到范围问题。
答案 1 :(得分:0)
这是因为你在click处理程序中定义了闭包。将taskgen
函数移动到单击处理程序之外,将所有内容包装在$(document).ready()
中,您应该好好去!见下文:
$(document).ready(function() {
$(".add_task_frm").click(function() {
taskgen();
});
function taskgen() {
var data = "task=" + $("#taskfrm").val();
alert(data); // only for debuging
var task_data = data;
alert(task_data); // only for debuging
$.post("whereitneedtogo.php?task=action80", task_data), //this is the ajax part
$("#add_task_diag").dialog("close").dialog("destroy"); // I usually chain 'close' and 'destroy'
}
});