如果值长度<1,则使用jquery恢复初始textarea值。 ñ

时间:2012-04-13 20:03:09

标签: jquery focus textarea blur

我是jquery和javascript编码的新手,我尝试编写一个函数,如果其值的长度小于&#34; n&#34;则会在textarea上恢复初始值。字符。它不起作用。你能解释一下如何做到这一点吗?

以下是代码:

$("textarea").focus(function() {
    var text = $(this).val();
    $(this).val('');
    $(this).blur(function() {
        if($(this).val().lenght<20)
        {
            $(this).val(text);
        }
    });
});

4 个答案:

答案 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
    }
});