【发布时间】:2012-10-20 03:19:53
【问题描述】:
我在这个问题上大吃一惊——我有一个搜索 MySQL 数据库并在表格中返回结果的页面。我希望用户能够更新结果,从而更新 MySQL 数据库。第一部分工作正常,我在页面上有一个搜索框,它使用 jQuery/ajax 来查询数据库并显示结果,例如:
<form class="well" id="jquery-submit-ajax" method="post">
<input type="text" name="userSearch" placeholder="Search…">
<label>Name/Email/id</label>
<Br />
<input type="submit" id="searchButton" value="Search">
</form>
<div class="alert alert-success hide">
<div id="success-output" class="prettyprint"></div>
</div>
<div id="loading-image" class="alert hide" style="text-align:center">
<img src="../images/ajax-loader.gif" /></div>
<div class="alert alert-error hide">
<div id="error-output" class="prettyprint"></div>
</div>
</div>
和 jQuery:
$("#jquery-submit-ajax").submit(function(e) {
$('#loading-image').fadeIn();
$.ajax({
type: "POST",
url: "jquery-ajax-control.php",
data: $(e.target).serialize(),
dataType: "html",
beforeSend:function(){
$('.alert-error,.alert-success').hide();
},
error: function(jqXHR, textStatus, errorThrown){
$('#loading-image').hide();
$('.alert-error').fadeIn();
$('#error-output').html(errorThrown);
},
success: function(data){
$('#loading-image').hide();
$('.alert-success').fadeIn();
$('#success-output').html(data);
}
});
return false;
});
所以结果被解析成每个结果的表格。该表中有一个带有提交按钮的表单。例如:
<form method="post">
<table>
<tr>
<td><input type="text" class="editbox" name="subs-expiry" value="<?php echo $expiry_date; ?>"</td>
</tr>
</table>
<input type="submit" class="updateSubsButtons" value="Update" />
</form>
我正在尝试再次通过 jQuery/Ajax 提交此表单,但无法正常工作。按下更新按钮会刷新整个页面。我已经把这个按钮的 jQuery 去掉了,只是在按下按钮时显示一个警报,但即使这样也不起作用。
$(".updateSubsButtons").on("submit", function(e){
alert("clicked");
e.preventDefault();
});
使用 Chrome 调试器,函数中的断点永远不会被命中,所以也许 jQuery 找不到按钮?我已经尝试过 .on() 和 .live() 函数,但我得到了相同的结果。我真的不知道这里发生了什么,所以任何帮助都将不胜感激!
【问题讨论】:
-
您是否尝试过使用
.on('click', ...)而不是.on('submit', ...)来阻止页面提交?如果输入是动态添加的,请尝试$(document).on('submit', '.updateSubsButtons', function() {})和$(document).on('click', '.updateSubsButtons', function() {}) -
可能会失败,因为 $("#jquery-submit-ajax").submit( 在没有 preventDefault 的情况下运行,然后再转到 $(".updateSubsButtons").on (“提交”... ?