2010-05-15 116 views
2

我使用搜索按钮在服务器端创建表格动态并使用Jquery语法返回它。 当我填写完表单并点击提交按钮后,还有另一个.submit()Jquery函数,假设在数据发送到服务器之前被调用来验证输入。 但是,由于某种原因,这个函数永远不会被调用,并且数据是请求被发送。 在更多的细节:动态创建表格

这是形式的检索算法按钮,在服务器端动态创建和“打印”到HTML页面使用jQuery:

<form action=... name="stockbuyform" class="stockbuyform" method="post"> 
<input type=text value="Insert purchasing amount"> 
<input type="submit" value="Click to purchase"> 
</form> 

这里是.submit()函数:

$(".stockbuyform").submit(function() { 
    alert("Need to validate purchasing details"); 
} 

但是我点击购买按钮,.submit()函数永远不会被调用。 这是否意味着我不能在第一次调用中使用另一个Jquery调用?

回答

0

我把它搜索的是一个AJAX请求。您需要绑定的表单提交动作AJAX完成后:

$.ajax({ 
    url: 'ajax/test.html', 
    success: function(data) { 
    $('.result').html(data); 
    $('#target').submit(function() { 
     alert('Handler for .submit() called.'); 
     return false; 
    }); 
    } 
}); 

一些事件可以用.live()http://api.jquery.com/live/被绑定到当前和未来的元素:

$('.button').live('click', function() { 
    // do something. 
}); 

.live()不有一些限制(见链接文档):

  • 它不能在本地DOM元素 工作,所以$( '表')生活( '点击', 功能(){});将无法工作。
  • 它不能链接,如 $('。somediv')。next()。live('click', function(){});将无法工作。

.delegate()方法应该是缓解这些限制,但据我所知它有自己的局限性。我其实没有用过这个......没有必要。从文档:

代表是使用 的.live()方法,从而允许为每个 到 特定的DOM元素事件代理的绑定的替代方案。

您还可以在JQuery的结合在AJAX成功/错误/功能齐全的新事件:

$.ajax({ 
    url: 'something.html', 
    success: function(data) { 
    //add new elements with data. 
    //bind new events to elements 
    } 
}); 
+0

我在AJAX完成后绑定表单提交操作,它工作。 谢谢! – Nathan 2010-05-15 15:37:15

+0

很高兴能帮到你! – 2010-05-16 23:56:14

1

使用事件代表团(livedelegate)。生活可能是最适合这种情况:

$(".stockbuyform").live("submit", function() { 
    alert("Need to validate purchasing details"); 
}); 

什么活做的是(从manual):

附加一个处理程序事件当前 选择匹配所有 元素,现在或将来。

因此,您不必担心ajax替换的元素会丢失绑定的事件处理程序。另外,确保从提交处理程序返回false,以防止发生非XHR GET/POST。