jquery焦点模糊传递参数

use*_*322 5 javascript jquery javascript-events

我似乎无法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);
         }
    }); 

});
Run Code Online (Sandbox Code Playgroud)

dek*_*dev 8

看起来问题是将数据传递到.blur或.focus事件.每个jQuery API - http://api.jquery.com/blur/

blur( [eventData ], handler(eventObject) )
Run Code Online (Sandbox Code Playgroud)

因此,如果您想传递数据 - 您可以将参数发送到事件 - 它将在事件对象中显示为数据.

看到这个小提琴更多信息

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);
});
Run Code Online (Sandbox Code Playgroud)


use*_*860 0

在我看来,你不了解 JavaScript 的基础知识。

首先,JS中的变量被本地化到函数的作用域,所以你不能var在一个函数中声明变量并在另一个函数中访问它

其次,你不能将任何东西传递给 DOM 事件处理程序,除了事件对象,这是由 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);
        }
     }); 

 });
Run Code Online (Sandbox Code Playgroud)

首先,您需要区分blur方法(函数)和handler(函数),后者是blur. 您试图将其defaultValue准确地传递给处理程序,但这是无法完成的。在处理程序内部,它们defaultValue是相等的eventObject,所以你可以这样做console.log(defaultValue.timeStamp),你会看到类似的东西123482359734536

在您的方法中,您甚至不能使用event.data参数,因为它将在调用blur时设置(附加处理程序)。blur您需要var在两个处理程序之外声明一个外部,以便它们对它们都可见

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

我读过 Nicolas Zakas 的《Professional JaveScript For Webdevelopers》。有新版本了