2010-08-12 4 views
1

J'écris un bouton d'entrée avec le code suivant:bouton d'entrée écrit jQuery append

$("#QnA").append("<input type='button' name='questionSub' value='Save'/>"); 

Ce que je voudrais faire saisir la fonction de clic de ce nouveau bouton. Voici ce que je tentais:

$('input[name=questionSub]').click(function() { 
    alert('hi'); 
}); 

Ce ne fonctionne pas pour moi. Des idées?

Répondre

3

Vous devez utiliser la méthode en direct de jQuery pour les éléments nouvellement créés

$('input[name=questionSub]').live("click", function() { 
    alert('hi'); 
}); 
+0

Cela a fonctionné! Merci. – webdad3

1

It works for me. (jsFiddle Example)

Assurez-vous que vous appelez la fonction clic après avoir joint en annexe le bouton input.


Edit:
Vous ne devez utiliser live() si vous voulez lier la fonction de clic avant vous ajoutez l'entrée, car en direct() va ajouter un gestionnaire à l'événement pour tous les éléments qui correspondent au sélecteur de courant , maintenant ou dans le futur.

jsFiddle Example

+0

C'est mon code aussi, mais cela ne fonctionnerait pas! Cependant, la solution .live (@Marko) a bien fonctionné. Merci. – webdad3

+0

@Jeff V - Vous ne devez avoir besoin de live que si vous ajoutez l'INPUT après avoir essayé de lier le clic. –

+0

@Peter - Peux-tu nous en dire plus? La fonction de clic est "après" le code d'ajout. Je ne sais pas si c'est ce que vous dites. Le .live est nouveau pour moi. Il est très possible que je fasse quelque chose d'incorrect dans mon code d'installation. Pour une raison quelconque, le code de votre exemple de violoniste (qui est le même que mon code original) ne fonctionne pas. – webdad3

3

Vous ne pouvez lier un événement à un élément après l'élément a été créé alors assurez-vous que le clic la liaison se produit après l'entrée a été ajouté.

+0

le numéro 1 n'est pas vrai, et le numéro 2 .... est, euh ... pas vrai :) – Marko

+2

@Marko - # 2 * est * vrai, vous ne pouvez lier un événement * à l'élément * qu'une fois qu'il est là. '.live()' ne lie pas * à l'élément *, il se lie à 'document' :) –

+0

Ok, je reprends mon downvote. Merde vous Craver :) – Marko

3

Vous pouvez joindre le gestionnaire de clic lors de sa création, comme ceci:

$("<input type='button' name='questionSub' value='Save'/>").click(function() { 
    alert('hi'); 
}).appendTo("#QnA"); 
+0

Je pourrais être en mesure de le faire, mais le code pourrait être beaucoup plus impliqué que juste l'alerte. – webdad3

+0

@Jeff V peut-être vrai. Si vous souhaitez conserver la visibilité, vous pouvez placer votre code dans une fonction et appeler cette fonction - c'est un choix de conception, mais c'est une meilleure solution que .live parce qu'elle se lie à l'ID #QnA et devrait donc être plus performant que lié au document. –

+0

& @Mark - Je pourrais utiliser cette solution dans une partie différente de l'application. Merci! – webdad3