2013-03-01 53 views
7

我有一個頁面,看起來像調用onclick屬性編程

<a href="#" id="001" onclick="fnaaa();" >...</a> 
    ... 
<a href="#" id="002" onclick="fnaba();" >...</a> 
    ... 
<a href="#" id="003" onclick="fncda();" >...</a> 


//sometimes maybe like this 
<a href="#" id="004" onclick="fnagg(); return false;" >...</a> 
    ... 

現在我的ID傳遞到頁面作爲查詢字符串上一堆<a>標籤,所以我本來想這樣做

$('a[id="' + id + '"]').click(); 
$('a[id="' + id + '"]').trigger("click"); 

事實證明這兩個都不允許,所以如果我有ID,我該如何調用寫入onclick屬性的函數?我知道我可以像這樣得到它

var funcToCall = $('a[id="' + id + '"]').attr('onclick'); 

但是我怎麼稱呼這個funcToCall?記住funcToCall可能不僅僅是一個函數名稱ex。 「fnagg(); return false;」

回答

8

首先,ID屬性有some restrictions,一個是它必須以字母開頭。修復後,我會推薦而不是使用內聯onclick處理程序。

$("#ID_HERE").click(function(e) { 
    fnaaa(); 
    e.preventDefault(); 
}); 

然後你就可以輕鬆地觸發它:

$("#ID_HERE").triggerHandler("click"); 

但是,如果你絕對必須用醜陋的onclick,你可以調用它like this

<a id="foo" href="#" onclick="alert('test');">Test</a> 
var el = document.getElementById('foo'); 
el.onclick(); 
+0

謝謝,那些不是我真正的id,我只是想簡化一個例子。所以人們可以看到我正在嘗試執行的操作 - 獲取內聯onclick屬性,只需知道標識即可動態調用 – 2013-03-01 20:06:54

+0

如果您仍然想使用jQuery來選擇元素(例如,如果您想選擇基於關閉你可以使用'$(selector)[0] .onclick();' – 2013-03-01 20:14:26

+0

觸發onclick處理程序Im獲取Object [object Object]沒有方法'onclick'與jquery versioin $(選擇器) [0] .onclick(); – 2013-03-01 20:26:07

3

您正在使用onclick屬性來綁定處理程序。試着像下面,

document.getElementById(id).click(); 

DEMO:http://jsfiddle.net/kpvKG/

+0

這是不允許的 - 請參閱http://jsfiddle.net/kpvKG/1/ – 2013-03-01 20:12:26

+1

@ScottSelby什麼?我想,你在演示中有一個錯字。檢查該演示中的屬性'id' ..將其作爲'd'而不是'id'。 – 2013-03-01 20:14:11

0

DEMO

function fnagg() 
{ 
    alert('fired'); 
} 
$(function(){ 
    eval("var funcToCall=function(){"+$('#004').attr("onclick")+"}"); 
funcToCall(); 
}); 
+1

使用'eval'不是一個好習慣。避免不惜一切代價。 – 2013-03-01 20:16:46

+0

@Vega,你是對的,但它是我知道在一個函數中包裝字符串的唯一方法,就像問題所要求的那樣。這不是真的總是邪惡的...每個頂級投票答案在這裏:http://stackoverflow.com/questions/86513/why-is-using-the-javascript-eval-function-a-bad-idea – 2013-03-01 20:19:44

0

我會做這樣的事情:

對於HTML

<a href="#" class="dynamicFuncs" id="my001" data-funcName="myFunc">test</a> 

而對於JavaScript的

$(document).ready(function(){ 
    $(".dynamicFuncs").on('click', function(){ 
     var theFunc = $(this).attr('data-funcName'); 
     window[theFunc](); 
    }) 
}); 

var myFunc = function() { 
    alert('me'); 
}; 
-1

它最好用的addEventListener(),您可以添加所有類型的事件。例如:「點擊」,「鼠標移動」等等。最後的錯誤是要阻止事件發生。如果您希望父dom對象也可以獲取單擊事件,請將其更改爲true。這個例子也不需要JavaScript庫。這只是簡單的舊javascript,並且可以在任何瀏覽器中使用,而不需要額外的東西。

<!DOCTYPE html> 
    <html> 
    <head> 
    <title>exampe</title> 
    </head> 
    <body> 
     <a id="test" href="">test</a> 
    <script> 
     document.getElementById("test").addEventListener("click",function(){ 
      alert('hello world'); 
     },false); 
    </script> 
    </body> 
    </html> 
,如果你想擁有的addEventListener調用一個函數只是第二個值更改爲這樣的函數名

document.getElementById("test").addEventListener("click",f1,false); 

這將執行該功能

function f1(){ ... }