Ajax PHP创建的表单未提交
我有一组三个combobox(下拉列表),由PHP填充数据库中的值。 我已经通过将回显的Submit按钮更改为type='submit'
并加载php页面本身来测试这些combobox。 他们以这种方式毫无障碍地工作。
但是,当我加载Ajax页面时,提交按钮拒绝触发Ajaxfunction。 我已经通过创建一组带有html的静态combobox来测试页面,在这种情况下,Ajax会毫不费力地触发。 然而,使用PHP创建的combobox不会触发Ajax。
我希望有人可以解释一下我的代码问题是什么。
HTML和jQuery:
$(document).ready(function() { function loadData(imgFamily, imgClass, imgGender){ $.ajax ({ type: "GET", url: "filter_test.php", data: {imgFamily:imgFamily, imgClass:imgClass, imgGender:imgGender}, success: function(data) { $("#gallery_container").html(data); }, }); } loadData(1); // For first time page load default results //Bind keypress event to Ajax call $('.filter').keypress(function(e) { if(e.keyCode == 13) { var imgFamily = $('#imgFamily').attr('value'); var imgClass = $('#imgClass').attr('value'); var imgGender = $('#imgGender').attr('value'); //Fetch the images loadData(imgFamily, imgClass, imgGender); } }); //Bind the click event to Ajax call on submit $("#submit").click(function(){ var imgFamily = $('#imgFamily').attr('value'); var imgClass = $('#imgClass').attr('value'); var imgGender = $('#imgGender').attr('value'); //Fetch the images loadData(imgFamily, imgClass, imgGender); }) });
PHP(虽然我不相信这里的问题):
我只显示一个combobox来节省空间,因为它们都是一样的
// Queries for combo boxes $imgFamily_query = "SELECT DISTINCT imgFamily FROM images WHERE $clause"; $imgClass_query = "SELECT DISTINCT imgClass FROM images WHERE $clause"; $imgGender_query = "SELECT DISTINCT imgGender FROM images WHERE $clause"; // Create the form and combo boxes echo "";
非常感谢您的帮助。
您插入表单,从而覆盖提交事件绑定到的元素。 插入新表单后,应重新执行绑定事件的代码。
更简洁的方法是返回一个只包含修改过的信息的JSON对象或XML,并更新当前的表单而不是插入一个全新的表单,但这样做会更有效。
function loadData(imgFamily, imgClass, imgGender){ $.ajax ({ type: "GET", url: "filter_test.php", data: {imgFamily:imgFamily, imgClass:imgClass, imgGender:imgGender}, success: function(data) { $("#gallery_container").html(data); bindEvents(); // <---- Call it here }, }); } // Separate function function bindEvents() { //Bind keypress event to Ajax call $('.filter').keypress(function(e) { if(e.keyCode == 13) { var imgFamily = $('#imgFamily').attr('value'); var imgClass = $('#imgClass').attr('value'); var imgGender = $('#imgGender').attr('value'); //Fetch the images loadData(imgFamily, imgClass, imgGender); } }); //Bind the click event to Ajax call on submit $("#submit").click(function(){ var imgFamily = $('#imgFamily').attr('value'); var imgClass = $('#imgClass').attr('value'); var imgGender = $('#imgGender').attr('value'); //Fetch the images loadData(imgFamily, imgClass, imgGender); }) } $(document).ready(function() { loadData(1); // For first time page load default results bindEvents(); // <---- And here (where your code originally was). });
这就是发生的事情(基本上是@GolezTrol所说的重新陈述):
- 您的页面完成加载
- 执行loadData(1),但因为它是异步调用,所以在获取表单元素之前继续执行。
- jquery执行了
$('.filter').keypress(function(e)
但是没有该类的元素,因此不会发生绑定。 -
$("#submit").click(function(){
具有相同的命运,我们还没有submit
id的元素。 - 响应ajax调用到达,
success
函数将表单元素添加到gallery_container
,但没有绑定。
您需要做的是在将相应元素添加到dom时调用事件绑定函数; 所以你应该把它们移到$("#gallery_container").html(data);
:
$(document).ready(function() { function loadData(imgFamily, imgClass, imgGender){ $.ajax ({ type: "GET", url: "filter_test.php", data: {imgFamily:imgFamily, imgClass:imgClass, imgGender:imgGender}, success: function(data) { $("#gallery_container").html(data); //Bind keypress event to Ajax call $('.filter').keypress(function(e) { if(e.keyCode == 13) { var imgFamily = $('#imgFamily').attr('value'); var imgClass = $('#imgClass').attr('value'); var imgGender = $('#imgGender').attr('value'); //Fetch the images loadData(imgFamily, imgClass, imgGender); } }); //Bind the click event to Ajax call on submit $("#submit").click(function(){ var imgFamily = $('#imgFamily').attr('value'); var imgClass = $('#imgClass').attr('value'); var imgGender = $('#imgGender').attr('value'); //Fetch the images loadData(imgFamily, imgClass, imgGender); }); } }); } loadData(1); // For first time page load default results });