我已经做了很多搜索,但无法找出为什么jquery.submit()不会触发。我也试过用.click()来选择submit按钮。
我现在有一个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>

当单击reply按钮时,我使用jquery将其附加到消息中(生成一个下拉回复表单,以便用户可以回复消息)。这很好(使用firebug也进行了双重检查)。
但是,我的jquery代码在单击submit按钮时不会产生警报,因此它甚至不会触发。有人能解释一下为什么会这样,谢谢!jquery代码:
$(document).ready(function() {
    $('.reply-message-form').submit(function() {
        alert('test');
        return false;
    }) ;
});

最佳答案

如果动态添加内容,则对.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;
});

07-24 09:47
查看更多