首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AJAX/jquery函数在每个页面加载中只能运行一次

AJAX/jquery函数在每个页面加载中只能运行一次
EN

Stack Overflow用户
提问于 2012-05-22 02:01:57
回答 6查看 3.6K关注 0票数 0

我正在创建一个动态的待办事项列表。该列表从本地数据库下载并显示在表中。在每个待办事项处都有一个提交按钮,您可以按下该按钮,该待办事项将在数据库中注册为“完成”。在我的代码中,这是通过一个名为status的变量来完成的,在该变量中,值为1表示完成,值为0表示撤消。

我的问题是,您可以按下任何按钮,所有按钮都可以正常工作;新的状态被发送到PHP脚本,然后PHP脚本修改数据库中的状态值。则网页自动更新显示表格。但是如果你再试一次,在任何其他按钮上,它都不起作用。您必须重新加载网页,其他按钮才能正常工作。

下面是我的Jquery/AJAX代码:

代码语言:javascript
运行
复制
        $(document).ready( function() {
            $('#todo_display_table input[type="submit"]').click(function(evt) {
               evt.preventDefault();

               var todo_id = $(this).val();
               //document.write(todo_id);//debug
               $.when(changeTodoStatusTo(1, todo_id)).then(updateTodoDisplay);
            });
        });

        function updateTodoDisplay() {
            $.post("./daily_todo_display.php", null, replaceTbodyHTML);
        }

        function replaceTbodyHTML(data) {
            $('#todo_display_table tbody').html(data);
        }

        function changeTodoStatusTo(newStatus, todo_id) {
            //Send til phpscript som lagrer ny status i databasen
            var parameters = {
                todo_id: todo_id,
                newStatus: newStatus
            };

            return $.post("./daily_todo_change_todo_status.php", parameters); //, printDebugInfo);
        }

我也可以发布我的PHP脚本,但我已经分别测试了它们,它们似乎是有效的。同样,我的页面上的所有功能都工作正常,但在您单击一次后,它们似乎停止工作。

我检查了数据库,状态值只在第一次尝试(第一次单击任何按钮)时更新,这表明问题出在click()函数或changeTodoStatusTo()函数中。Thnx需要任何帮助,请不要犹豫,要求更多信息=)

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-05-22 02:05:20

是否在更新时重新创建提交按钮?如果不看你所有的代码,就很难判断。您是否尝试过更改此设置:

代码语言:javascript
运行
复制
$('#todo_display_table input[type="submit"]').click(function(evt) {

要这样做:

代码语言:javascript
运行
复制
$('#todo_display_table input[type="submit"]').live('click', function(evt) {

如果适用,请查看以下内容:http://api.jquery.com/live/

票数 1
EN

Stack Overflow用户

发布于 2012-05-22 02:10:09

您不应该使用jQuery的实时函数:

从jQuery 1.7开始,不推荐使用.live()方法。使用.on()附加事件处理程序。旧版本jQuery的用户应该优先使用.delegate()而不是.live()。

此方法提供了一种将委托的事件处理程序附加到页面的文档元素的方法,从而简化了将内容动态添加到页面时事件处理程序的使用。有关更多信息,请参阅.on()方法中关于直接事件与委托事件的讨论。

jQuery live documentation

正如文档所述,请改用.on()。它的工作方式与.live()相同:)

票数 3
EN

Stack Overflow用户

发布于 2012-05-22 02:05:56

我猜您在更新clickhtml()时丢失了#todo_display_table事件代码。试试live()

代码语言:javascript
运行
复制
$('#todo_display_table input[type="submit"]').live('click', function(evt) {
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10690240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档