[英]How can I execute an external function when an element is clicked?
我試圖在點擊DOM元素時執行外部函數,而不將其包裝在另一個函數中。
假設我有一個名為sayHello()
的函數,如下所示:
function sayHello(){
alert("hello");
};
要在點擊時執行它,我目前必須這樣做:
$("#myelement").click(function(){
sayHello();
});
注意我被迫將單個函數調用包裝在另一個函數中。 我想要做的就是這樣
$("#myelement").click(sayHello());
除此之外根本不起作用。 我可以避免以任何方式將單個函數調用包裝在另一個函數中嗎? 謝謝!
。
附加信息:當我需要將參數傳遞給函數時,我將如何實現相同的功能?
..
附加信息:像Chris Brandsma和Jani Hartikainen所指出的那樣,應該能夠使用bind函數將參數傳遞給函數而不將其包裝在另一個匿名函數中:
$("#myelement").bind("click", "john", sayHello);
sayHello()
現在接受一個新參數,如下:
function sayHello(name){
alert("Hello, "+name);
}
不幸的是,這似乎不起作用......任何想法? 事件/綁定文檔位於此處謝謝!
從你在那里的問題中挑選。
顯然,你需要以這種方式調用它:
$("#myelement").click(sayHello);
以它的方式調用它實際上執行方法而不是將方法發送到單擊處理程序。
如果您需要傳遞數據,您也可以這樣調用方法:
$("#myelement").click(function(){ sayHello("tom");});
或者您可以通過bind()
函數傳遞數據
function sayHello(event){ alert("Hello, "+event.data); }
$("#myelement").bind("click", "tom", sayHello);
或者,您可以從單擊的元素中檢索數據
$("#myelement").click(function(){sayHello($(this).attr("hasData");});.
希望有所幫助。
您正在調用sayHello函數,您可以通過刪除括號來引用它:
$("#myelement").click(sayHello);
編輯:如果需要將參數傳遞給sayHello函數,則需要將其包裝在另一個函數中。 這定義了一個無參數的新函數,它使用創建時提供的參數調用函數:
$("#myelement").click(function () {
sayHello('name');
// Creates an anonymous function that is called when #myelement is clicked.
// The anonymous function invokes the sayHello-function
});
$( “#myelement”)點擊(的sayHello());
這實際上是在設置click
處理程序之前調用sayHello()
。 它試圖將sayHello()
的返回值設置為回調函數!
相反,嘗試:
$("#myelement").click(sayHello);
關於你的編輯,如果你需要傳遞參數,你可以使用你已經使用的閉包技術,但如果你正在尋找更清潔的東西,那么看看如何通過參數傳遞對函數的引用?
點擊時你會傳遞什么參數? 如果你事先知道它們是什么,你可以在用戶點擊之前設置它們。
你不能傳遞參數,但你可以通過簡單地將成員添加到觸發事件的對象來偽造參數,所以..
myObject.onClick = sayHello;
myObject.param1 = "foo";
然后,當你打電話給這個
function sayHello(){
alert(this.param1);
}
現在不推薦使用bind()
方法。
從jQuery 3.0開始,
.bind()
已被棄用。 它被.on()
方法取代,因為自jQuery 1.7以來將事件處理程序附加到文檔,因此不鼓勵使用它。
最好使用on()
方法進行所有事件綁定以保持一致性。 您可以將參數作為事件名稱后面的第二個參數傳遞給處理程序。
function sayHello(name){
console.log('Hello ' + name);
};
$('#myelement').on('click', 'John', sayHello);
是的,而不是傳遞sayHello(),只需傳遞函數名稱。
$("#myelement").click(sayHello);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.