表单不遵循.live()绑定

时间:2011-07-18 21:09:20

标签: forms jquery

我有一个在加载文档后生成的表单。我试图用return false;停止提交,但它不会阻止表单重新加载文档。这是我的代码:

$('#name-update.updateAcct').live('submit', function(){
    var action = $(this).attr('data-action');
    console.log(action);
    switch(action){
        case "name":
            var firstName = $(this).children('input#contct_firstName').val();
            var lastName = $(this).children('input#contct_lastName').val();
            console.log(firstName+" "+lastname);
            break;
    }
    return false;
});

我不知道为什么这句话没有停止表格。

2 个答案:

答案 0 :(得分:2)

尝试将event.preventDefault();添加到观察者的顶部:

$('#name-update.updateAcct').live('submit', function(event){
    event.preventDefault(); // stop default form submission
    var action = $(this).attr('data-action');
    console.log(action);
    switch(action){
        case "name":
            var firstName = $(this).children('input#contct_firstName').val();
            var lastName = $(this).children('input#contct_lastName').val();
            console.log(firstName+" "+lastName);
            break;
    }
    return false;
});

答案 1 :(得分:2)

下面:

console.log(firstName+" "+lastname);

lastname不存在(应该是lastName)=>抛出javascript错误=> .live函数永远没有时间到return false =>表格正常提交。

就获取这些名称而言,我发现你使用的是id选择器,因为HTML中的id应该是唯一的,你可以像这样简化你的生活:

var firstName = $('#contct_firstName').val();
var lastName = $('#contct_lastName').val();

或:

var firstName = $('input#contct_firstName', this).val();
var lastName = $('input#contct_lastName', this).val();

但老实说,代码越短,发生错误的概率就越小。