2010-10-01 6 views
1

J'essaie d'utiliser javascript et jquery pour faire un peu de traçage, voici le code que je définis le bouton, mais la première fois que je clique ne le fait pas travail, la deuxième fois ça marche bien, je ne comprends pas pourquoi.mon bouton jquery ne fonctionne pas quand je clique sur la première fois

$('<p><input type="button" value="Plot Data" /></p>').click(getData).appendTo('#plot'); 

Quelqu'un peut-il m'aider à l'expliquer? Merci!

Mengfei

+0

Vous allez devoir révéler ce _getData() _ fait. Il peut être utile d'ajouter l'élément au DOM d'abord, puis de joindre le gestionnaire d'événements, mais peut-être pas. – Thomas

+0

Salut, getData() télécharge des données à partir d'un autre serveur et les trace en flot, je ne comprends pas bien ce que vous voulez dire par "appedn à l'élément au DOM", pourriez-vous expliquer un peu plus? – Mengfei

Répondre

1
var 
    // function for event click 
    getData = function(ev) { 
     alert('ok'); 
    }, 
    // your button 
    button = $('<input type="button" value="Plot Data" />').click(getData), 
    // append to p container 
    pcontainer = $('<p></p>').append(button).appendTo('#plot'); 

example

EDIT pour commentaires

var 
    // counter clicks 
    clickCounter = 0, 
    // function for event click 
    getData = function(ev) { 

     $('#controlClick').append('click in getData '+(++clickCounter)+'<br />'); // firsts lines 

     // your code; 
     // don't put return false or ev.stopPropagation() 
    }, 
    controlEvent = function(ev) { 
     $('#controlClick').append('click in control<br />'); 
    }, 
    // your button 
    button = $('<input type="button" value="Plot Data" />') 
    .bind('click', getData) 
    .bind('click', controlEvent), 
    // append to p container 
    pcontainer = $('<p></p>').append(button).appendTo('#plot');​ 

example update

+0

Salut Andres, merci pour l'exemple, j'ai changé avec votre code, mais il faut encore cliquer deux fois, peut-être qu'il y a quelque chose qui cloche avec ma fonction getData ... vraiment confus maintenant. – Mengfei

+0

essayer cette gestion d'événement simple –

0

Parce que l'action de clic sur 'p'. Jquery retournera l'objet du html externe, dans votre cas 'p'. Essayez ceci à la place:

$('#plot').append($('<p></p>').append($('<input type="button" value="Plot Data" />').wrap('').click(getData))); 
+0

'$ (''). Click (getData) .wrap ('

') .parent(). AppendTo ('# plot');' :) –

+0

Bonjour Dan, avec votre code je n'ai pas eu le bouton ... – Mengfei

+0

Salut Nick, avec votre code, il faut encore deux fois cliquez .. – Mengfei

0

Avez-vous essayé de supprimer les balises "p" de votre code?

+0

Salut, je viens d'essayer et le premier clic ne fonctionne toujours pas – Mengfei

Questions connexes