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)
看起来问题是将数据传递到.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)
在我看来,你不了解 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》。有新版本了