jquery val函数从textarea获取新值

时间:2012-10-10 10:11:44

标签: jquery textarea jquery-click-event

here是一个jsfiddle

这是我的HTML

<table id="commentsTable">
        <tr>
            <td name="userid"> JIM </td>
            <td name="comment" id="68" class="commentTD">  something   </td>
            <td><a class="edit" href="#">edit</a></td>
        </tr>
</table>​

和我的js:

var update = "update";

$("a.edit").click(function(e) {
    e.preventDefault();
    var comment = $(this).closest("tr").find('.commentTD');
    comment.html('<textarea name="comment" class="commentArea">' + comment.text() + '</textarea>');
    $(this).removeClass().addClass(update).text(update);
    bindUpdate();
});

function bindUpdate() {
    $("a." + update).click(function(e) {
        e.preventDefault();
        var commentNewText = $(this).closest('tr').find('textarea.commentArea').val();
        alert(commentNewText);
    });
};​

我可以添加一个textarea并将click事件绑定到它,但我似乎无法获得新值,我得到旧的...

2 个答案:

答案 0 :(得分:2)

问题在于,您没有从链接中解除旧事件的绑定,因此每次单击它时它仍然会添加一个新的textarea,只有它会调用bindUpdate()函数。

请参阅此更新的jsFiddle:http://jsfiddle.net/RALDF/8/

编辑:我建议将$(this)的值保存到变量中并重新使用它,因为您多次调用它,这会对性能产生负面影响/每次执行$(this)/

时,jQuery都需要创建新对象

答案 1 :(得分:2)

你在新的处理程序之前触发了第一个处理程序。如果您将unbind添加到第一个处理程序,则它可以正常工作(fiddle)。为了以更可预测的方式实现这一点,您可以将处理程序提取到单独的函数中。