1

是一个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 并将一个点击事件绑定到它,但我似乎无法获得新值,我得到了旧值......

4

2 回答 2

2

问题是您没有从链接中取消绑定旧事件,因此每次单击它时它仍然会添加一个新的文本区域,然后它才会调用 bindUpdate() 功能。

看到这个更新的 jsFiddle:http: //jsfiddle.net/RALDF/8/

编辑:我建议将值保存$(this)到变量中并重新使用它,因为您多次调用它,这对性能有负面影响/jQuery 每次执行 $(this)/ 时都需要创建新对象

于 2012-10-10T10:18:47.173 回答
2

You're getting your first handler triggered before the new one. If you add unbind to the first handler it work ok (fiddle). To acheive this in a more predictable way you may extract your handlers to the separate functions.

于 2012-10-10T10:19:39.513 回答