5

defaultValue関数で変数down にアクセスできないようです.blur()。私はさまざまなことを試しましたが、運がありません。これまでのところ、空のオブジェクトしか取得できません。どうしたの?

jQuery(document).ready(function(){

    jQuery('#nameInput, #emailInput, #webInput').focus(function(){      
        var defaultValue = jQuery(this).val();
        jQuery(this).val("");
    })
    .blur(function(defaultValue){   
         if(jQuery(this).val() == ""){
             jQuery(this).val(defaultValue);
         }
    }); 

});
4

3 に答える 3

9

質問は、データを .blur または .focus イベントに渡すことに関するものです。jQuery APIごと - http://api.jquery.com/blur/

blur( [eventData ], handler(eventObject) )

したがって、データを渡したい場合は、パラメーターをイベントに送信できます。これは、イベント オブジェクトのデータとして表示されます。

詳細については、このフィドルを参照してください

http://jsfiddle.net/dekajp/CgP2X/1/

var p = {
    mydata:'my data'
};

/* p could be element or whatever */
$("#tb2").blur(p,function (e){
    alert('data :'+e.data.mydata);
});
于 2013-07-19T18:19:01.677 に答える
3

コードが間違っているため :-) 関数内で var を定義すると ( var defaultValue)、すぐに消去されます。

2 つの解決策があります。blur イベントをバインドする前に変数をグローバル変数として定義するか、オブジェクト liket his のデータに格納します (これをお勧めします)。

$(document).ready(function(){
    $('#nameInput, #emailInput, #webInput').focus(function(){      
        $(this).val("").data('defaultValue',jQuery(this).val());
    }).blur(function(defaultValue){   
        if($(this).val() == ""){
            $(this).val($(this).data('defaultValue'));
        }
    }); 
});
于 2012-08-18T17:32:41.200 に答える
1

JavaScript の基本を理解していないようです。

まず、JS の変数は関数のスコープにローカライズされているため、varある関数で変数を宣言して、別の関数で変数にアクセスすることはできません。

第二に、event-object を除いて、DOM イベント ハンドラーには何も渡すことができません。これは DOM 仕様で定義されています。場合によっては、event dataパラメーターをblurjQuery メソッドに使用できます。

これを試して:

jQuery(document).ready(function(){
    var defaultValue;
    jQuery("#nameInput, #emailInput, #webInput").focus(function(){      
        defaultValue = jQuery(this).val();
        jQuery(this).val("");
    })
    .blur(function(){   
        if(jQuery(this).val() == ""){
            jQuery(this).val(defaultValue);
        }
     }); 

 });

まず、blurメソッド (関数) とhandlerへの引数である (関数) を区別する必要がありますblur。ハンドラーに正確に渡そうとしましたdefaultValueが、それはできません。内部ハンドラーはdefaultValueequaleventObjectになるため、smth likeconsole.log(defaultValue.timeStamp)を実行すると、smth like が表示されます。123482359734536

あなたのアプローチでは、の呼び出し時に設定される原因にevent.data引数を使用することさえできません(ハンドラーのアタッチ)。両方のハンドラーの外側で宣言する必要があるため、両方に表示されますblurblurvar

JS に関する包括的な本を読むことを検討してください。

Nicolas Zakas による「Web 開発者向けのプロフェッショナルな JaveScript」を読みました。新刊あります

于 2012-08-18T16:16:14.830 に答える