2010-07-06 8 views
0

J'essaie de donner un bouton un événement onclick quand une certaine chose sur une page change. J'ai essayé de le faire de différentes manières et aucune n'a fonctionné. Qu'est-ce que je fais mal?JavaScript OnClick problème dynamique

Voici ce que j'ai essayé.

document.getElementById(subDiv).onclick = function() { alert('Error. There is an error on the the page. Please correct that then submit the page'); }; 


document.getElementById(subDiv).onclick = "alert('Error. There is an error on the the page. Please correct that then submit the page');"; 


function redErrorAlert() 
{ 
    alert('Error. There is an error on the the page. Please correct that then submit the page'); 
} 
document.getElementById(subDiv).onclick = redErrorAlert; 



document.getElementById(subDiv).setAttribute('onclick',redErrorAlert(), false); 



document.getElementById(subDiv).setAttribute('onclick','redErrorAlert()', false); 

Remarque: subDiv est une variable contenant l'identifiant de l'élément.

+0

Vous devriez vraiment envisager d'utiliser une bibliothèque js comme jquery car elle rend cette al ot plus facile et cross navigateur compatible. Cela dit .. Quel navigateur essaies-tu de tester cela? – spinon

+0

@spinon Je teste dans Chrome, mais il doit fonctionner dans IE, FF et Chrome – Jason

Répondre

0

Cela ressemble à un territoire jQuery ici. Une fois que vous aurez appris les tenants et les aboutissants de jQuery, des choses comme celles-ci sont un jeu d'enfant, et vous vous retrouverez à écrire beaucoup moins de JavaScript.

D'abord, obtenir de jQuery http://jquery.com/

Ensuite, placez dans votre code pour lier l'événement:

$('#idOfElementToBindClickEvent').click(function(){ 
    alert('Error.'); 
}); 

jQuery fournit essentiellement un moyen de manipuler des éléments à l'aide de sélecteurs comme CSS.

2

Vous devez attendre que l'arborescence DOM soit créée avant d'effectuer des requêtes sur celle-ci.

Assurez-vous que tout cela se passe dans un contexte qui est créé après l'arbre DOM a été construit:

window.onload = function() { 
    document.getElementById(subDiv).onclick = function() { alert('Error. There is an error on the the page. Please correct that then submit the page'); }; 
}; 
+0

La page a déjà été chargée lors de l'appel. La fonction qui effectue l'appel n'est appelée que lorsqu'une boîte de saisie change et ne valide pas. L'arbre DOM devrait déjà être chargé à ce stade, n'est-ce pas? – Jason

1

document.getElementById() prend une chaîne contenant l'ID de l'élément que vous êtes essayer de trouver. En supposant que vous recherchez l'élément avec l'ID 'subDiv', vous devriez appeler document.getElementById ('subDiv').

(Il est également possible que la SubDiv variable dans votre code est une chaîne contenant l'ID, mais comme vous ne l'avez pas parlé je suppose que cela ne fonctionne pas.)

EDIT: Si vous deviez suivre la suggestion de virstulte d'utiliser jQuery, vous attacheriez une fonction à l'événement document.ready afin de vous assurer que le DOM a été construit au moment où votre code s'exécute. Exemple:

$(document).ready(function() { 
    $("#subDiv").click(function() { alert("Test!"); }); 
}); 
+0

subDiv est une variable contenant l'identifiant. Désolé pour ça. – Jason

+0

Ah, alors c'est comme Jacob a dit - le DOM n'a pas encore été initialisé. Je pense aussi à l'excellente suggestion de virstulte de vérifier jQuery. J'ai édité ma réponse pour combiner le code de Jacob et de virstulte. – Faisal

0

essayer

document.getElementById(subDiv).onclick = alert('Error. There is an error on the the page. Please correct that then submit the page'); 

ou

function redAlert() { 
    alert('Error. There is an error on the the page. Please correct that then submit the page'); 
} 

document.getElementById(subDiv).onclick = redAlert(); 

Premier cas: vous devez appeler la fonction, et vous avez attribué une chaîne

Deuxième cas: vous avez attribué une fonction et vous n'appelez pas cette fonction

Questions connexes