这里是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">×</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说我正在点击哪个按钮?
答案 0 :(得分:2)
您遇到的问题来自于拥有多个表单,然后最终序列化错误的表单。
您将提交事件绑定到包含.form
的任何内容,从而能够捕获任何表单的提交事件。
我指的是这一行:
$('.form').submit(function(){
然而,问题在于您实际通过ajax发送的内容,罪魁祸首是以下行:
data: $('.form').serialize(),
当您有一个表单时,该行正常工作。当你有多个表单时,jQuery如何知道要序列化的表单? 根据我的假设,选择最后一个表格,因为选择器
它将序列化所有表单,但是当值到达PHP脚本时 - 传播的那些将是最后表单的值,因为所有表单中的字段名称都相同。$('.form');
将选择所有表格。
因此,您需要修改绑定提交事件的函数。你必须告诉该功能“请序列化实际提交的表格”。你可以通过以下方式完成:
$(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执行特定操作。