2013-03-01 12 views
7

Mam kilka <a> tagi na stronie, które wyglądają mniej więcej takwywołanie atrybut onclick programowo

<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> 
    ... 

teraz mam id przekazany do strony jako ciąg kwerendy, więc początkowo chciał zrobić coś takiego

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

okazuje się zarówno od tych, które nie są dozwolone, więc jeśli mam identyfikator, w jaki sposób można wywołać funkcję, która jest napisany w atrybut onclick? Wiem, że prawdopodobnie mogę uzyskać to w ten sposób, ale jak mogę nazwać to funcToCall? pamiętając, że funcToCall może być czymś więcej niż tylko nazwą funkcji ex. "fnagg(); return false;"

Odpowiedz

8

Przede wszystkim atrybut ID ma numer some restrictions, z czego jeden musi zaczynać się od litery. Po naprawieniu tego, polecam nie przy użyciu wbudowanej obsługi onclick.

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

Następnie można wywołać go łatwo:

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

Jeśli jednak absolutnie musi używać brzydkie onclick, można wywołać ją like this:

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

dziękuję, to nie są moje prawdziwe id, po prostu próbuję uprościć na przykład. aby ludzie mogli zobaczyć, co próbuję zrobić - uzyskać atrybut inline onclick, który będzie wywoływany dynamicznie, ale tylko znając identyfikator –

+0

Jeśli nadal chcesz użyć jQuery, aby wybrać element (na przykład, jeśli chcesz wybrać oparty na off czegoś innego niż ids), możesz uruchomić procedurę obsługi onclick za pomocą '$ (selektor) [0] .onclick();' –

+0

Otrzymuję Object [object Object] nie ma metody "onclick" z wersją jquery versioin (selektor) [0] .onclick(); –

3

używasz onclick atrybut do wiązania obsługi. Spróbuj jak poniżej,

document.getElementById(id).click(); 

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

+0

to niedozwolone - patrz http://jsfiddle.net/kpvKG/1/ –

+1

@ScottSelby Co? Myślę, że masz literówkę w tym demo. Sprawdź atrybut "id" .. w tym demo masz go jako "d" zamiast "id". –

0

DEMO

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

Używanie 'eval' nie jest dobrą praktyką. Unikaj za wszelką cenę. –

+0

@Vega, Masz rację, ale to jedyny sposób, w jaki znam zawijanie łańcucha w funkcji, o którą pyta. To naprawdę nie zawsze jest złe ... na najlepszą głosowaną odpowiedź tutaj: http://stackoverflow.com/questions/86513/why-is-using-the-javascript-eval-function-a-bad-idea –

0

chciałbym zrobić coś takiego:

Dla html

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

I javascript

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

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

wszelkich starań, aby użyć addEventListener() można dodać wszystkie rodzaje imprez. przykład: "kliknij", "mousemove" i wiele innych. Fałsz na końcu to powstrzymanie zdarzenia przed przechodzeniem przez dom. Jeśli chcesz, aby obiekty nadrzędne domin również uzyskiwały zdarzenie click, po prostu zmień je na true. również ten przykład nie wymaga bibliotek javascript. To jest po prostu stary javascript i będzie działać w każdej przeglądarce, nie wymagając niczego więcej.

<!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> 

jeśli chcesz mieć addEventListener wywołać funkcję wystarczy zmienić 2nd wartości do nazwy funkcji, takich jak ten.

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

ten będzie wykonywał funkcję

function f1(){ ... } 
Powiązane problemy