5

我似乎无法defaultValue在我的.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,然后立即将其清除。

有两种解决方案:在绑定模糊事件之前将您的 var 定义为全局 var,或者将其存储在对象 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在另一个函数中访问它

其次,你不能将任何东西传递给 DOM-event handler,除了 event-object,这是由 DOM 规范定义的,有时你可以使用jQuery 方法event data的参数。blur

尝试这个:

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确切地传递给处理程序,但这无法完成。在处理程序内部defaultValue是相等的eventObject,所以你可以做 smth like console.log(defaultValue.timeStamp),你会看到 smth like123482359734536

在您的方法中,您甚至不能对将在调用时设置的原因使用event.data参数(附加处理程序)。您需要在两个处理程序之外声明 a ,因此它们对它们都是可见的blurblurvar

你可以考虑阅读一些关于 JS 的综合书籍。

我读了 Nicolas Zakas 的“Professional JaveScript For Webdevelopers”。有一个新版本

于 2012-08-18T16:16:14.830 回答