如何在动态元素上使用preventDefault?

时间:2015-11-13 13:58:53

标签: jquery forms dynamic preventdefault

我有一堆动态创建并添加到div的表单。每个表单的id也是动态创建的 - ids总是不同的,但它们都以......开头。

updateFRM_

我无法使preventDefault()工作 - 我不确定是否存在问题,或者语法是否错误以至于js失败并重新加载。

为动态生成和动态命名的表单设置侦听器的正确语法是什么?

$( "#updater" ).on( "submit", "form[id^='updateFRM_']", function(e)
{ 
    e.preventDefault();

感谢您的时间和帮助

3 个答案:

答案 0 :(得分:6)

使用$(document)选择器,您可以定位动态生成的元素。这是因为该文档涵盖了dom,而不仅仅是最初加载的html。以下是您可以做的两个例子。这完全取决于您的代码以及您将使用这两种选择中的哪一种。

基于ID

var formid = 'someformid';
$(document).on('submit', '#' + formid, function(e) {
    e.preventDefault();
    // Do your form stuff
    return false;
});

基于类

$(document).on('submit', '.my-form', function(e) {
    e.preventDefault();
    var formid = $(this).attr('id');
    // Do stuff with the formid 
    return false;
});

更新

return false;不是必需的。我添加它以防e.preventDefault()失败。一些jQuery版本有不同的方法来阻止默认操作。使用return false;做同样的事情。它执行上面的代码然后,而不是默认操作返回false

答案 1 :(得分:1)

试试这个

 $(function(){
    $("form[id^='updateFRM_']").on("submit", function(e){
        e.preventDefault();
    });
 });

答案 2 :(得分:1)

您应该为表单分配一个类,例如.prevent-default并以这种方式操作它们。处理动态生成的ID是一个巨大的麻烦,特别是对于CSS选择器。