所以我在textarea上有一个.live()点击事件,允许用户发表评论。 我还有这个Jquery函数来清除“发表评论...”的默认文本,并取消绑定事件,如果用户再次点击textarea,他们的评论不会被删除。
这是功能。
$('#comment-textarea').live('click', function(e) {
$(this).text('');
$(this).unbind(e);
});
但是,当用户提交通知时,即使清除了默认文本并输入了自己的文本,也会提交默认文本。我认为这是造成这种情况的非绑定事件,但我也是这样写的。
$('#comment-textarea').live('click', function(e) {
if($(this).text() == 'Leave a comment') {
$(this).text('');
}
});
但它仍然提交了初始文本。有没有人遇到过这个?
*** EDIT
因此100%确保jquery事件不绑定到不在屏幕视图中的元素。如果我在div中向下滚动,div下方和视图之外的任何内容都不会做任何事情。
答案 0 :(得分:2)
因为您应该使用val()
,而不是text()
。 <textarea>
是一个HTML表单控件,对于表单控件,您可以使用val()
函数获取其当前值,或val(x)
函数来设置其当前值。
$('#comment-textarea').live('click', function(e) {
$(this).val('');
$(this).unbind(e);
});
答案 1 :(得分:2)
使用.val
而不是.text
。另外.one
是一次更好的解决方案:
$('#comment-textarea').one('focus', function(e) {
$(this).val('');
});
另外,请看一下HTML5中的placeholder
属性(它在没有JS的现代浏览器中实现了同样的功能):
答案 2 :(得分:0)
将所有$(this).text('');
替换为$(this).val('');
答案 3 :(得分:0)
我会使用HTML5 placeholder
加Modernizr和polyfill来支持旧浏览器并编写更多语义代码。
<textarea placeholder="Leave a comment..."></textarea>
就是这样!