2013-12-19 176 views
4

我試圖在我創建的jQuery元素上調用一個javascript函數,但似乎該函數在函數上運行時沒有被調用。該函數在獨立運行時工作,但在另一個jQuery對象上運行時不起作用。下面是函數:在jQuery對象上調用javascript函數

$(document).ready(function() { 
var $Chart = $('#Chart'); 
/* 
returns true if some Expand element is open 
*/ 
function closeExpand() { 
    alert("Hello"); 
    /*$(this).css("background-color", "black");*/ 
}; 
}); 

它適用於自己的調用時:http://jsfiddle.net/5F5GF/

$('.ChartLink').click(function() { 
    closeExpand(); 
    }); 
}); 

但是沒有其他的jQuery對象調用時:http://jsfiddle.net/dsHRN/

$('.ChartLink').click(function() { 
    $Chart.closeExpand(); 
    }); 
}); 

我在做什麼錯在這裏,以及如何調用另一個對象的JavaScript函數?

回答

5

你可以擴展jquery.fn(jQuery的原型),以添加新的功能,因此,它是從jQuery對象訪問:

嘗試:

$.fn.closeExpand = function() { 
    this.css("background-color", "black"); 
    return this; //for chaining 
}; 
$Chart.closeExpand(); 

Demo

你函數closeExpand當前沒有關聯到jquery對象原型,通過將它添加到原型中,您可以使用jquery對象調用它。

或者你可以這樣做:

$('.ChartLink').click(function() { 
    closeExpand.call($(this)); 
}); 

function closeExpand() { 
    this.css("background-color", "black"); 
}; 
+0

頂部解決方案的工作,謝謝!我仍然對「$ .fn.closeExpand」語法的工作原理有些困惑,你能否解釋爲什麼這個語法是必要的,而不是我所做的? (我會在4分鐘內接受你的答案) – Tim

+1

@Tim'$ .fn'是jquery原型的別名,所以你只是將你的函數作爲jquery原型的一部分加入,所以你創建的任何jquery對象都可以訪問此功能。使用您的原始代碼,它不關聯到jquery原型,這就是爲什麼你不能僅僅從jquery對象調用它。 – PSL

+0

啊,就像其他常規jQuery對象一樣,我明白了。非常感謝:) – Tim

相關問題