2010-07-23 15 views
31

Ho cercato di aggiungere eventi onclick ai nuovi elementi che ho aggiunto con JavaScript.Aggiungi evento onclick all'elemento appena aggiunto in JavaScript

Il problema è quando controllo document.body.innerHTML Posso effettivamente vedere onclick = alert ('blah') aggiunto al nuovo elemento.

Ma quando faccio clic su quell'elemento non vedo che la casella di avviso funzioni. In realtà tutto ciò che riguarda JavaScript non funziona ..

qui è quello che uso per aggiungere nuovo elemento:

function add_img() { 
    var elemm = document.createElement('rvml:image'); 
    elemm.src = 'blah.png'; 
    elemm.className = 'rvml'; 
    elemm.onclick = "alert('blah')"; 
    document.body.appendChild(elemm); 
    elemm.id = "gogo"; 
    elemm.style.position='absolute'; 
    elemm.style.width=55; 
    elemm.style.height=55; 
    elemm.style.top=200; 
    elemm.style.left=300; 
    elemm.style.rotation=200; 
} 

Ecco come io chiamo questa funzione:

<button onclick=add_img()>add image</button> 

Ora l'immagine disegna perfettamente all'interno del browser. Ma quando clicco sull'immagine non ricevo quell'allarme.

+0

Oh, la bellezza di jQuery. Forse questo sarà utile in futuro :) $ ('. Rvml'). Live ('click', function() {alert (1);}); –

risposta

87

.onclick deve essere impostato su una funzione anziché su una stringa. Prova

elemm.onclick = function() { alert('blah'); }; 

invece.

+0

perfetto grazie :) – SolidSnake

+0

Funziona per IE8? – human

+0

@human Sono abbastanza sicuro che funzioni fino a IE4. – kennytm

11

Non sono sicuro ma provate:

elemm.addEventListener('click', function(){ alert('blah');}, false); 
+0

Anche con '.addEventListener' il secondo argomento deve ancora essere una funzione, non una stringa. – kennytm

+0

utilizzando jQuery non ricordavo questo;) Grazie –

+0

Questo non funziona in IE8: http://caniuse.com/#search=addEventListener –

1

non è possibile assegnare un evento da stringa. Utilizzare quello:

elemm.onclick = function() {alert ('blah'); };

1

Risposta breve: si desidera impostare il gestore a una funzione:

elemm.onclick = function() { alert('blah'); }; 

Leggermente risposta più: si dovrà scrivere un paio di righe di codice per ottenere che per lavorare in modo coerente tutti i browser.

Il fatto è che anche il codice leggermente più lungo che potrebbe risolvere quel particolare problema in un insieme di browser comuni avrà comunque problemi particolari. Quindi se non ti interessa il supporto cross-browser, vai con quello totalmente breve. Se ti interessa e vuoi solo far funzionare questa singola cosa, vai con una combinazione di addEventListener e attachEvent. Se vuoi essere in grado di creare estensivamente oggetti, aggiungere e rimuovere listener di eventi in tutto il codice e volere che funzioni su tutti i browser, devi assolutamente delegare tale responsabilità a una libreria come jQuery.

+1

Ho bisogno di questo solo per Internet Explorer .. quello corto funziona come fascino. grazie per la soluzione dettagliata però – SolidSnake

1

Non penso che tu possa farlo in questo modo. Si dovrebbe usare:

void addEventListener( 
    in DOMString type, 
    in EventListener listener, 
    in boolean useCapture 
); 

Documentazione right here.

0

Hai tre diversi problemi. Prima di tutto, i valori nei tag HTML dovrebbero essere citati! Non farlo potrebbe confondere il browser e potrebbe causare alcuni problemi (anche se probabilmente non è il caso qui). Secondo, dovresti effettivamente assegnare una funzione alla variabile onclick, come qualcun altro ha fatto la mediazione. Non solo questo è il modo corretto per farlo andare avanti, ma rende le cose molto più semplici se si sta tentando di utilizzare variabili locali nella funzione onclick. Infine, puoi provare addEventListener o jQuery, jQuery ha il vantaggio di un'interfaccia migliore.

Oh, e assicurati che il tuo codice HTML sia valido! Questo potrebbe essere un problema.

+0

sto usando questo a livello locale. quindi non sarà un problema per me .. su jQuery Non mi piace perché non riesco a prendere il controllo di tutto e il suo solo disordinato con un sacco di codici e ha un impatto con altre librerie javascript. Preferirei costruire la mia libreria piuttosto che sprecare il mio tempo per capire come usare jQuery. grazie per il tuo aiuto però :) – SolidSnake

-1

Nel caso in cui non si desideri scrivere tutto il codice che si è scritto una volta nella funzione chiamata. Si prega di utilizzare il seguente codice, utilizzando jQuery:

$ (elemento) .on ('click', function() {add_img();});

Problemi correlati