1

我在使用以下 jquery 代码时遇到问题。

$(document).ready(function() {

$(".box").submit(function(e) {       
      e.preventDefault();
        var input_value = $(".textbox").val();
        $("<li>"+ input_value +" <br /> <form class='box'><input type='text' name='textbox' class='textbox reply'></form> <ul class='list'></ul></div></li>")
        .prependTo($(this).siblings('.list').first());
    });
});

当我 prependTo() 到现有的 HTML 时,一切正常,但是一旦我尝试 prependTo() 到由 javascript 创建的元素,我就会遇到错误。

我创建了以下jsfiddle来说明

4

3 回答 3

0

您需要使用事件委托。因此改变

$(".box").submit(function(e) { 

$(document).on("submit", ".box", function (e) {

为了能够on()使用 jQuery 1.7 或更高版本

要从新插入的字段中正确获取值也需要更改

var input_value = $(".textbox").val();

var input_value = $(this).find(".textbox").val();

jsFiddle

于 2013-05-09T04:58:02.593 回答
0

由于您使用的是 jQuery 1.6.4,因此使用.live()使用事件委托。如果您使用 jQuery >= 1.7,请改用.on ()

$(document).ready(function() {

    $(".box").live('submit', function(e) {   
        e.preventDefault();
        var input_value = $(".textbox").val();
        $("<li>"+ input_value +" <br /> <form class='box'><input type='text' name='textbox' class='textbox reply'></form> <ul class='list'></ul></div></li>")
        .prependTo($(this).siblings('.list').first());
    });
});

演示:小提琴

于 2013-05-09T04:58:58.833 回答
0

这是因为新创建的元素还没有被推送到 DOM 中。您需要首先在 DOM 中推送元素(我的意思是执行类似 .html() 之类的操作,以便该元素现在存在于 DOM 中),然后您可以使用prependTo()新创建的元素

于 2013-05-09T04:59:53.117 回答