Jquery val()不会重新检查/重新评估该值

时间:2012-09-28 21:03:31

标签: php jquery

简短说明 我正在使用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。

感谢帮助,我希望这是一个愚蠢或简单的。

2 个答案:

答案 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'
    }

});