Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery焦点模糊传递参数_Javascript_Jquery_Javascript Events - Fatal编程技术网

Javascript jquery焦点模糊传递参数

Javascript jquery焦点模糊传递参数,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我似乎无法在我的.blur()函数中访问变量defaultValue。我试过各种各样的东西,但都不走运。到目前为止,我只得到一个空对象。怎么了 jQuery(document).ready(function(){ jQuery('#nameInput, #emailInput, #webInput').focus(function(){ var defaultValue = jQuery(this).val(); jQuery(this).v

我似乎无法在我的
.blur()
函数中访问变量
defaultValue
。我试过各种各样的东西,但都不走运。到目前为止,我只得到一个空对象。怎么了

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);
         }
    }); 

});

在我看来,您似乎不了解JavaScript的基础知识

首先,JS中的所有变量都被本地化为函数的作用域,所以您不能在一个函数中声明带有
var
的变量,而在另一个函数中访问它

其次,您不能将任何内容传递给DOM事件处理程序,除了事件对象,这是由DOM规范定义的,有时您可以使用
event data
参数传递给
blur
jQuery方法

试试这个:

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
,因此您可以执行类似于
console.log(defaultValue.timeStamp)
的smth操作,您将看到类似于
123482359734536

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

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


我读了Nicolas Zakas的“网络开发者的专业JaveScript”。有一个新版本

,因为您的代码是错误的:-)您在函数中定义了var(
var defaultValue
),然后立即将其删除

有两种解决方案:在绑定blur事件之前将您的var定义为全局var,或者将其存储在object liket his的数据中(我推荐):


看起来问题是关于将数据传递到.blur或.focus事件。 根据jQuery API-

所以,若你们想传递数据,你们可以向事件发送一个参数,它将作为数据出现在事件对象中

查看此小提琴以了解更多信息


我已经知道函数中定义的一个变量被本地化为该特定函数。我试图将变量作为参数传递给模糊函数,但不知道如何准确地传递。这样做,而不是全球化的变量似乎更优雅的解决方案。
$(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'));
        }
    }); 
});
blur( [eventData ], handler(eventObject) )
var p = {
    mydata:'my data'
};

/* p could be element or whatever */
$("#tb2").blur(p,function (e){
    alert('data :'+e.data.mydata);
});