[英]jquery focus blur pass parameter
我似乎無法在我的.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);
}
});
});
看起來問題是將數據傳遞到.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);
});
因為你的代碼是錯誤的:-)你定義了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'));
}
});
});
在我看來,你不了解JavaScript的基礎知識。
首先,JS中的變量被本地化為函數的作用域,因此您不能在一個函數中使用var
聲明變量並在其他函數中訪問它
其次,你不能將任何東西傳遞給DOM事件處理程序,除了event-object,這是由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
這樣的123482359734536
在你的方法中你甚至不能使用event.data
參數blur
因為它將在blur
調用時設置(附加處理程序)。 您需要在兩個處理程序之外聲明一個var
,因此它們都可以看到
您可以考慮閱讀一些關於JS的綜合性書籍。
我讀了尼古拉斯扎卡斯的“專業JaveScript For Webdevelopers”。 有一個新版本
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.