2014-02-13 22 views
0

我對事件中的數據傳遞有點困惑。我得到的結果不一致,我想了解爲什麼$(this).val()沒有通過,但如果我先聲明它的確如此。我明白爲什麼最後的方法有效,但不是爲什麼它不返回任何內容/未定義。有人能幫我解決這個問題嗎?在事件中傳遞數據 - 做什麼和不該做什麼

編輯:obj<input id="test" value="myvalue" type="text">

obj = $('#test'); 

tellme = function(data){ 
    alert(data); 
} 
obj.on('click',function(e){ tellme($(this).val()) }); //How I usually pass things 

tellmeagain = function(event){ 
    alert(event.data.val); 
} 
obj.on('click',{val:'test'},tellmeagain); //works 
obj.on('click',{val:this.value},tellmeagain); //undefined 
obj.on('click',{val:$(this).val()},tellmeagain); //returns nothing 

value = obj.val() 
obj.on('click',{val:value},tellmeagain); //works 

回答

1

問題與這些表達式

obj.on('click',{val:this.value},tellmeagain); //undefined 
obj.on('click',{val:$(this).val()},tellmeagain); //returns nothing 

this.value$(this).val()在結合時間計算,而不是事件發生時。不僅價值沒有改變,但this甚至不是你的元素(如果你的代碼在全球範圍內或在你的小提琴中回調$.ready),它可能是window

爲了使它更清楚,這條線

obj.on('click',{val:this.value},tellmeagain); //undefined 

相當於

var rhfle = {val:this.value}; // what do you think is this ? it's window 
obj.on('click',rhfle,tellmeagain); 
+0

你能詳細說明嗎?爲什麼'$(this)|| this'不是我的元素?它使用第一個函數報告值。 –

+0

因爲在你寫'{val:this.value}'的範圍內,'this'沒有理由成爲你的元素。它是什麼,我們無法從你展示的代碼中看出來。 –

+0

啊,檢查我包含在OP中的小提琴。這是一個輸入。 –

0

僅僅是因爲價值來自於 「目標文件」,而不是 「本」

value = obj.val() 

this.value ?????