1

$(this)入力プレースホルダーのクロス ブラウザー ソリューションに jquery を使用していますが、この 2 部構成の関数の 2 番目の部分で使用できるようにグローバル変数を設定する方法がわかりません。最初に入力の値を取得して保存します$valueが、空の値を置き換えるために 2 番目の関数で再度使用する必要があります。どうすればいいですか?私が言及すべきことは、これは 1 つのフォームで複数のテキスト入力に対して機能する必要があるということです。

       $(document).ready( function() {
        $('input[type=text]')
         .on('focus', function(){
            var $this = $(this);
            var $value = $(this).val();
            globalVar = $value;
            if($this.val() == $value){
             $this.val('');
            }
         })
         .on('blur', function(){
            var $this = $(this);
            if($this.val() == ''){
             $this.val($value);
            }
         });
       });    
4

4 に答える 4

4

これらの 2 つの関数の範囲外で変数を使用することもできますが、おそらくdata保存場所として使用する方がよいでしょう。

$(document).ready( function() {
        $('input[type=text]')
         .on('focus', function(){
            var $this = $(this);
            if ($this.val()) {
              $this.data('myval', $this.val());
            }
            $this.val('');
         })
         .on('blur', function(){
            var $this = $(this);
            if($this.val() == ''){
             $this.val($this.data('myval'));
            }
         });
});     

編集:

これを追加しました:

   if ($this.val()) {
     $this.data('myval', $this.val());
   }
于 2012-09-11T05:35:28.060 に答える
2

$valueいわゆるクロージャーを使用して、両方の関数の外側で宣言する必要があります。このように、 $value は、 の同じ呼び出し内で作成された両方の関数間で共有されますready。(注:readyほとんどの場合、一度しか呼び出されないため、グローバル変数を使用することもできます。ただし、これはグローバル名前空間を汚染する可能性があるため、使用したくありません。)

$(document).ready( function() {
        var $value;
        $('input[type=text]')
         .on('focus', function(){
            var $this = $(this);
            $value = $(this).val();
            globalVar = $value;
            if($this.val() == $value){
             $this.val('');
            }
         })
         .on('blur', function(){
            var $this = $(this);
            if($this.val() == ''){
             $this.val($value);
            }
         });
       });    

'input[type=text]複数の要素がある場合、これらの要素はすべて同じ$value変数を共有するため、これは正しい結果を生成しない (または偶然にのみ) ことに注意してください。この場合、this.data他の投稿に記載されている解決策を使用する必要があります。

于 2012-09-11T05:34:23.477 に答える
0

関数の外で変数を定義し、目的の値を割り当てます。

var $value = null;
$(document).ready( function() {
        $('input[type=text]')
         .on('focus', function(){
            var $this = $(this);
            $value = $(this).val();
            globalVar = $value;
            if($this.val() == $value){
             $this.val('');
            }
         })
         .on('blur', function(){
            var $this = $(this);
            if($this.val() == ''){
             $this.val($value);
            }
         });
       });    
于 2012-09-11T05:33:50.463 に答える
0

これを試して、

var $value;
$(document).ready( function() {
        $('input[type=text]')
         .on('focus', function(){
            var $this = $(this);
            $value = $(this).val();
            globalVar = $value;
            if($this.val() == $value){
             $this.val('');
            }
         })
         .on('blur', function(){
            var $this = $(this);
            if($this.val() == ''){
             $this.val($value);
            }
         });
       });    
于 2012-09-11T05:33:08.233 に答える