javascript如何区分表单中的一个按钮与另一个按钮?

时间:2014-12-05 12:01:42

标签: javascript php jquery twitter-bootstrap

这里是index.php的代码:

<html>
<head>
    <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <table>
        <tr>
            <td>Name</td>
            <td>Band</td>
            <td>Indx</td>
            <td>Send</td>
        </tr>
        <tr>
            <td>Bruce</td>
            <td>Iron Maiden</td>
            <td>95</td>
            <td>
                <form action="" class="form" method="POST">
                    <input class="name" name="name" type="hidden" value="Bruce">
                    <input class="band" name="band" type="hidden" value="Iron Maiden">
                    <input class="indx" name="indx" type="hidden" value="95">
                    <button class ="send" type="submit">SEND<button>
                </form>
            </td>
        </tr>
        <tr>
            <td>James</td>
            <td>Metallica</td>
            <td>90</td>
            <td>
                <form action="" class="form" method="POST">
                    <input class="name" name="name" type="hidden" value="James">
                    <input class="band" name="band" type="hidden" value="Metallica">
                    <input class="indx" name="indx" type="hidden" value="90">
                    <button class ="send" type="submit">SEND<button>
                </form>
            </td>
        </tr>
    </table>

    <div class="result"></div>

    <script src="https://code.jquery.com/jquery-1.11.1.js"></script>
    <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
    <script>

        $(function(){
            $('.form').submit(function(){
                $.ajax({
                    data: $('.form').serialize(),
                    type: 'POST',
                    url: 'remote.php',
                    success: function(data){
                        $('.result').html(data);
                    }
                });
                return false;
            });
        });
    </script>
</body>
</html>

这里是remote.php的代码

<?php

    $name = $_POST['name'];
    $band = $_POST['band'];
    $indx = $_POST['indx'];
    $up = $indx * 2;

    $output = '
        <div id="rock-modal" class="modal fade in" role="dialog" tabindex="-1" aria-labelledby="myLargeModalLabel" aria-hidden="true">
            <div class="modal-dialog modal-lg">
                <div class="modal-content">
                    <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                        <h4 class="modal-title" id="myModalLabel">
                            <i class="fa fa-files-o"></i>
                            Rock Modal
                        </h4>
                    </div>
                    <div class="modal-body">
                        The band '.$band.' has an up index of '.$up.'!!!
                    </div><!-- /modal-body -->
                </div><!-- /modal-content -->
            </div><!-- /modal-dialog modal-lg -->
        </div><!-- /modal fade in-->
        <script type="text/javascript">
            $("#rock-modal").modal("show");
        </script>';
    echo $output;

当我在表格中只有一行时(例如:Iron Maiden),我会收到带有相应信息的bootstrap模式。当我在表格中有多行时(例如:Iron Maiden和Metallica),当我点击第一行的按钮时,我只从最后一行(在本例中为Metallica)收到结果。如果我插入另一行并单击第一个或第二个按钮,我会收到模态总是带有最后一行的信息。

我怎么能对javascript说我正在点击哪个按钮?

3 个答案:

答案 0 :(得分:2)

您遇到的问题来自于拥有多个表单,然后最终序列化错误的表单。

您将提交事件绑定到包含.form的任何内容,从而能够捕获任何表单的提交事件。 我指的是这一行:

$('.form').submit(function(){

然而,问题在于您实际通过ajax发送的内容,罪魁祸首是以下行:

data: $('.form').serialize(),

当您有一个表单时,该行正常工作。当你有多个表单时,jQuery如何知道要序列化的表单? 根据我的假设,选择最后一个表格,因为选择器$('.form');将选择所有表格。 它将序列化所有表单,但是当值到达PHP脚本时 - 传播的那些将是最后表单的值,因为所有表单中的字段名称都相同。

因此,您需要修改绑定提交事件的函数。你必须告诉该功能“请序列化实际提交的表格”。你可以通过以下方式完成:

$(function(){
        $('.form').submit(function(e){
            $.ajax({
                data: $(e.currentTarget).serialize(),
                type: 'POST',
                url: 'remote.php',
                success: function(data){
                    $('.result').html(data);
                }
            });
            return false;
        });
    });

请注意回调函数和data行的更改。这意味着您不必告诉javascript按下了哪个按钮。你要做的是序列化提交的表格。

答案 1 :(得分:-1)

对表单或按钮使用唯一ID。然后用:

打电话给他们
$('#form-one button') // if you set ID to form

$('#my-button-id') // if you set id to button.

ID必须是唯一的才能遵循HTML规则并使jQuery正常工作

答案 2 :(得分:-1)

为每个创建的按钮创建唯一的类值,以便您可以在jquery中引用它。 在您的示例中,两者都使用'send'定义。您可以在类attibute中为两个按钮添加另一个类值,并设置一个唯一的值,如:

<button class ="send button_1" type="submit">SEND<button>

<button class ="send button_2" type="submit">SEND<button>

另外,您可以使用唯一ID来jquery执行特定操作。