jQuery的.submit()不触发(jQuery .submit() not triggerin

2019-06-27 02:57发布

我已经做了很多搜索的,但不能找出为什么我的jQuery .submit()不会触发。 我也试过用.click()提交按钮。

我现在有一个div模板(包括表格):

<div class="reply-to-existing-message" style="display: none">
        <form class="reply-message-form">
            <textarea id="post-reply-message-textarea" name="PostReplyMessage[message]" rows="3" cols="40" style="resize: none"></textarea>
            <input class="reply-to-message-id" type="hidden" name="PostReplyMessage[id]" />
            <input class="post-reply-message-submit" type="submit" value="Reply"/>
        </form>
    </div>

我此追加到使用jQuery被点击回复按钮时(产生一个下拉答复形式,从而用户可以答复的消息)的消息。 这工作正常(使用Firebug太双重检查)。

但是,我的jQuery代码不会产生当我点击提交按钮报警,所以它甚至没有触发。 可能有人请解释为什么会发生,谢谢! jQuery代码:

$(document).ready(function() {
    $('.reply-message-form').submit(function() {
        alert('test');
        return false;
    }) ;
});

Answer 1:

如果你动态地添加内容,静态调用.submit()是不会为你工作。 这只会结合事件处理程序, 在它运行的时间匹配选择的元素,所以之后添加的所有元素不会有事件处理程序的约束。

解决的办法是事件委托 ,使用.on()函数:

$(document).on('submit', '.reply-message-form', function(e) {
    alert('test');
    return false;
});

理想的情况下,而不是使用document ,你会选择最接近的静态(即页面加载时存在),将包含所有动态内容的元素。

或者,如果你使用之前的1.7版本的jQuery,因此不具备访问.on()函数,你可以使用.delegate()函数:

$(document).delegate('.reply-message-form', 'submit', function(e) {
    alert('test');
    return false;
});


Answer 2:

对于动态生成的元素,你应该委托的事件,你可以使用on方法,请尝试以下操作:

$(document).ready(function() {
    $(document).on('click', 'input[type=submit]', function() {
        alert('test');
        return false;
    });
});


文章来源: jQuery .submit() not triggering