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事件绑定到它,但我似乎无法获得新值,我得到旧的...
答案 0 :(得分:2)
问题在于,您没有从链接中解除旧事件的绑定,因此每次单击它时它仍然会添加一个新的textarea,只有它会调用bindUpdate()函数。
请参阅此更新的jsFiddle:http://jsfiddle.net/RALDF/8/
编辑:我建议将$(this)
的值保存到变量中并重新使用它,因为您多次调用它,这会对性能产生负面影响/每次执行$(this)/
答案 1 :(得分:2)
你在新的处理程序之前触发了第一个处理程序。如果您将unbind
添加到第一个处理程序,则它可以正常工作(fiddle)。为了以更可预测的方式实现这一点,您可以将处理程序提取到单独的函数中。