jquery焦点模糊传递参数

时间:2012-08-18 16:06:39

标签: 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);
         }
    }); 

});

3 个答案:

答案 0 :(得分:7)

看起来问题是将数据传递到.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);
});

答案 1 :(得分:3)

因为你的代码错了:-)你定义了var inside函数(var defaultValue),然后立即将其删除。

有两种解决方案:在绑定模糊事件之前将var定义为全局变量,或将其存储在对象数据中(我推荐):

$(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'));
        }
    }); 
});

答案 2 :(得分:1)

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

首先,JS中的变量已本地化为函数的作用域,因此您无法在一个函数中使用var声明变量并在其他函数中访问它

其次,除了event-object之外,你不能将任何东西传递给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

这样的smth

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

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

我读过Nicolas Zakas撰写的“专业JaveScript For Webdevelopers”。有一个新版本