1

私はjqueryとjavascriptのコーディングに不慣れで、値の長さが「n」文字未満の場合にテキストエリアの初期値を復元する関数を作成しようとしました。動作しません。その方法を教えていただけますか?

コードは次のとおりです。

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

4 に答える 4

4

あまり効率的ではありませんが、これで作業は完了します。

var text='';

$("textarea").focus(function() {
    text = $(this).val();
});

$("textarea").blur(function() {
    if($(this).val().length<20)
    {
        $(this).val(text);
    }
});
于 2012-04-13T20:12:20.030 に答える
2

lenghtである必要がありますlength

blurこれを修正すると、毎回イベントを再アタッチしているが、削除することはないことがわかります。つまり、大量のリスナーがアタッチされていることになります。oneまたは、より一般的なblurものを1回だけ添付してみてください。

于 2012-04-13T20:07:15.020 に答える
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/

于 2012-04-13T20:07:04.010 に答える
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
    }
});
于 2012-04-13T20:07:11.473 に答える