2014-04-24 16 views
0

我有這個錯誤,它不工作。在jquery點擊事件中傳遞對象

我想調用一個共享函數來警告傳入的數據,這是從兩個不同的點擊事件中調用的,但是|我在警報中得到了定義。爲什麼我得到定義不清?

var myF = function(){ 
    alert('a click ' + this.model + ' ' + this.year); // meant to alert the properties of the object passed to it 
    alert(this.ID); // meant to alert the ID of the click that called it 
}; 

var myCar = new Object(); 
myCar.make = "Ford"; 
myCar.model = "Mustang"; 
myCar.year = 1969; 

var myCar2 = mycar; 
myCar2.make = "VW"; 
myCar2.model = "golf"; 
myCar2.year = 2000; 


$('.feature1').click(myCar,myF); 

$('.feature2').click(myCar2,myF); 

回答

1

要訪問在事件處理程序中的數據,你必須使用event.data

var myF = function(e){ 
    alert('a click ' + e.data.model + ' ' + e.data.year); 
    alert(this.id); 
}; 

此外,它包含了ID的屬性被稱爲id ,而不是ID。而你有錯別字myCar2 = mycar而不是myCar2 = myCar

Demo

0

你得到undefined因爲this變量是jQuery的錨對象。什麼在你的情況是

var myF = function(car){ 
alert('a click ' + car.model + ' ' + car.year); 
}; 

var myCar = new Object(); 
myCar.make = "Ford"; 
myCar.model = "Mustang"; 
myCar.year = 1969; 

var myCar2 = new Object(); 
myCar2.make = "VW"; 
myCar2.model = "golf"; 
myCar2.year = 2000; 


$('.feature1').click(function() { return myF(myCar); });  
$('.feature2').click(function() { return myF(myCar2); }); 

這不是最佳的方式來做到這一點,但它會得到它的工作。

http://jsfiddle.net/MWxG8/

+1

當你這樣做:MYF(myCar)您呼叫的那一刻該功能。這不會將處理程序添加到點擊功能 – edrian

+0

,這會在點擊 –

+0

之前調用該功能,您需要返回一個功能並且不要直接調用警報 –

1

在回調,「這」指的是你做了點擊的元素。該函數將在事件參數中接收您的自定義對象。

你可以做這樣的:

$('.feature1').click({myModel: myCar}, myF); 
    var myF = function(e){ 
    var data = e.data.myModel; 
    alert('a click ' + data.model + ' ' + data.year); 
};