2010-08-04 8 views
4

Je joins un événement onclick sur un bouton créé dynamiquement mais l'événement ne se déclenche pas.greasemonkey ajouter un événement onclick au bouton

var ind = location.href.indexOf('http://www.example.com/'); 
function init(){ 
    alert('h'); 
} 
if(ind != -1){  
    var elem = document.createElement("input"); 
    elem.id ='btnGumb'; 
    elem.value = 'Select Check box'; 
    elem.type = 'button'; 
    elem.style.position = 'fixed'; 
    elem.style.left = '0px'; 
    elem.style.top = '0px'; 

    //this is not working 
    elem.setAttribute('onclick', 'init();'); 

    //but alert is working: elem.setAttribute('onclick', 'alert("h");'); 

    document.body.appendChild(elem); 

} 

Répondre

2

Utilisez addEventListener.

elem.addEventListener('click', init, false); 

Votre fonction init n'est pas définie dans la fenêtre de page de contenu, de sorte que vous ne pouvez pas définir le nom de la fonction en tant que chaîne.

+0

Dans votre réponse, quel est le but de la partie « false » ? – RayB

+1

@ Rayz321, il s'agit de savoir s'il faut utiliser la capture ou le bullage. Si vous n'êtes pas sûr, vous devez généralement utiliser false/bullbling. Les navigateurs plus récents permettent d'omettre ce troisième paramètre, mais je ne le recommande pas actuellement. –

1

Je n'ai pas travaillé avec GreaseMonkey, mais je suppose que votre script est dans sa propre portée et toutes ses variables sont libérées après l'exécution du script. Puisque vous définissez init dans cette portée, mais que vous l'appelez ensuite sur la page principale, la fonction n'est pas définie lorsqu'elle est appelée.

Vous pouvez mettre toute la fonction en cas onclick ou déclencher un rappel:

if (elem.addEventListener) { 
    elem.addEventListener('click',init,false); 
} else { 
    elem.attachEvent('onclick',init); 
} 

(attachEvent est IE-spécifique)

Questions connexes