我似乎无法在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);
}
});
});
答案 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
在您的方法中,您甚至无法使用event.data
参数blur
因为它将在blur
调用时设置(附加处理程序)。您需要在两个处理程序之外声明var
,因此它们都可以看到
您可以考虑阅读一些关于JS的综合性书籍。
我读过Nicolas Zakas撰写的“专业JaveScript For Webdevelopers”。有一个新版本