jQuery AJAX用表单(好)替换提交的表单,但它不会再次提交

时间:2013-03-02 01:19:07

标签: jquery ajax forms response reload

我在PHP中使用循环来显示CMS管理部分中的用户数据。每行(用户)包括一些我想连接到命令的图标(例如:编辑,删除等)。该表的最后一行具有空输入字段,其中包含单个图标(命令)以允许添加新用户。这是users表的HTML ...

<div id="wrap">
<form method="post" id="form_users">
    <div class="table">
        <div class="row header">
            <div class="columns icons"></div>
            <div class="columns data">Username</div>
            <div class="columns data">First Name</div>
            <div class="columns data">Last Name</div>
            <div class="columns data">Email</div>
            <div class="clear"></div>
        </div><!-- .header -->
        <div class="row odd">
            <div class="columns icons">
                <input type="hidden" name="userID" value="0000000010" />
                <input type="image" src="../img/icons/delete_16.png" name="submit" value="delete" />
                <a href="?action=edit&userID=0000000010" class="edit"></a>
            </div>
            <div class="columns data">admin</div>
            <div class="columns data">david</div>
            <div class="columns data">kirkland</div>
            <div class="columns data">awesome@example.com</div>
            <div class="clear"></div>
        </div>
        <div class="row even">
            <div class="columns icons">
                <input type="hidden" name="userID" value="0000000001" />
                <input type="image" src="../img/icons/delete_16.png" name="submit" value="delete" />
                <a href="?action=edit&userID=0000000001" class="edit"></a>
            </div>
            <div class="columns data">coolguy</div>
            <div class="columns data">john</div>
            <div class="columns data">doe</div>
            <div class="columns data"></div>
            <div class="clear"></div>
        </div>
        <div class="row new">
            <div class="columns icons">
                <input type="image" src="../img/icons/save_16.png" name="submit" value="new" />
            </div>
            <div class="columns data">
                <input type="text" name="user[2][username]" value="" maxlength="30" class="field new" />
            </div>
            <div class="columns data">
                <input type="text" name="user[2][first_name]" value="" maxlength="30" class="field new" />
            </div>
            <div class="columns data">
                <input type="text" name="user[2][last_name]" value="" maxlength="30" class="field new" />
            </div>
            <div class="columns data">
                <input type="text" name="user[2][email]" value="" maxlength="30" class="field new" />
            </div>
            <div class="clear"></div>
        </div>
    </div><!-- .table -->
</form>

当点击其中一个图标时,我使用jQuery / AJAX将命令发送到服务器。响应是从<form></form>的更新用户表。这是jQuery ......

<script type="text/javascript">
    $(function(){

        $('input[name=submit]').click(function(event){

            event.preventDefault();

            // setup array
            var values = {};

            // which submit button was clicked
            var submit_type = $(this).val();

            if( submit_type=='new' ){

                $('form input:not(input[name=submit])').each(function(){
                    values[this.name] = $(this).val();
                });

            }else{

                $(this).siblings().not('input[name=submit]').each(function(){
                    values[this.name] = $(this).val();
                });

            }

            $.ajax({
                type: "POST",
                url: "ajax.users.php",
                data: { action: submit_type, data: values }
            }).done(function( response ) {
                $('#wrap').html(response);
            });

        });

    });
</script>

一切都适用于第一个动作。我可以使用上面的代码删除或添加用户。单击该图标会将数据发送到AJAX。 AJAX运行适当的查询,我重建用户表。该响应返回到第一个文件,用户表替换为新用户表而没有刷新。一切都很好,直到我尝试第二次行动。

第二次点击不执行任何操作。第三次单击会导致整页重新加载,并且操作会再次起作用。例如,我转到该页面并单击以删除用户。它们被删除了。我点击删除其他用户。什么都没发生。我再次点击。页面重新加载并被删除。

我不确定它是否重要,但我在第一次加载页面时使用PHP包含我的AJAX提交的相同文件。该文件生成“用户表”。

<div id="wrap">
<?php include 'ajax.users.php'; ?>
</div>

我已经搜遍过,并且找不到与此情况有关的任何内容。我似乎无法给谷歌正确的关键字组合,以获得我正在寻找的答案。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

$('input[name=submit]').click(function(event){仅绑定调用.click时的输入。使用事件委托。

$("#wrap").on('click', 'input[name=submit]', function (event) {

答案 1 :(得分:0)

您的javascript将click事件的事件处理程序附加到与“input [name = submit]”选择器匹配的任何元素,但只在页面加载后执行此操作。

这意味着任何其他与选择器匹配的表单都不会附加这个处理程序,因为你需要一个委托的事件处理程序。

$(document).on("click","input[name=submit]",function() {...}); 

理想情况下,您应该使用类来标识应该以这种方式运行的提交按钮,否则每个提交按钮将使用相同的处理程序。