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