我是jquery和javascript编码的新手,我尝试编写一个函数,如果其值的长度小于" n"则会在textarea上恢复初始值。字符。它不起作用。你能解释一下如何做到这一点吗?
以下是代码:
$("textarea").focus(function() {
var text = $(this).val();
$(this).val('');
$(this).blur(function() {
if($(this).val().lenght<20)
{
$(this).val(text);
}
});
});
答案 0 :(得分:4)
虽然效率不高,但这可以做到这一点:
var text='';
$("textarea").focus(function() {
text = $(this).val();
});
$("textarea").blur(function() {
if($(this).val().length<20)
{
$(this).val(text);
}
});
答案 1 :(得分:2)
lenght
应为length
。
一旦你解决了这个问题,你会发现你每次重新附加blur
事件但从未删除它,这意味着你将附加大量的听众。请尝试one
或更一般的blur
附加一次。
答案 2 :(得分:0)
您需要创建一个具有局部范围的闭包,并传入您的变量,使其在该范围内是本地的:
$("textarea").focus(function() {
var text = $(this).val();
$(this).val('');
(function(initialText) {
$(this).blur(function() {
if($(this).val().length < 20)
{
$(this).val(initialText);
}
});
})(text);
});
如果没有使用闭包创建这样的局部作用域,那么传递给.blur()
的事件处理程序将不知道text
是什么,因为它不在此函数的范围内
阅读有关js闭包的更多信息,例如在这里:http://jibbering.com/faq/notes/closures/
答案 3 :(得分:0)
您可以针对此类情况使用.data
功能。见下文,
$("textarea").one('focus', function() { //will be executed once
$(this).data('init_val', $(this).val()); //set data with initial value
$(this).val(''); //clear the textarea
}).blur(function() {
if($(this).val().length<20) { //Check if entered text val is < 20
$(this).val($(this).data('init_val'));//If yes, update with initial val
}
});