2011-11-16 4 views
1

J'ai un AJAX, il tire dans ce qui suit, qui est ajouté à un div en utilisant innerHTML.Javascript innerHTML avec onclick ne fonctionne pas

<a href="#" onclick="javascript:document.getElementById('textareax').value += '\r\nTEST';">Add</a> 

Puis, quand je presse le lien « Ajouter », il va ajouter « TEST » dans textareax. Si je l'ai dans le HTML du document depuis le début, cela fonctionne parfaitement, mais quand je le tire en utilisant AJAX et en utilisant innerHTML pour l'ajouter au div le lien "Ajouter" ne fonctionne pas.

Je pense que cela pourrait être un problème, car il contient du javascript et je ne fais que l'ajouter en utilisant innerHTML, mais je ne sais pas comment résoudre ce problème.

+1

Pouvez-vous montrer un peu plus de code, comme vous faites votre requête Ajax? – talnicolas

+0

Oui, je suis sûr que la liaison d'événements ne fonctionne pas si vous faites cela. Pouvez-vous créer le DOM avec createElement() et attacher votre gestionnaire d'événements manuellement? C'est comme ça que je le fais toujours .. –

+0

Il y a eu une question très similaire à propos de cette question hier. Découvrez les réponses à cette question: http://stackoverflow.com/questions/8145244/why-doesnt-browser-parse-the-js-code-in-the-file-loaded-by-ajax/8145255. Peut-être que cela peut vous aider – GNi33

Répondre

2

\r\n est un retour à la ligne, mais est déjà analysé par JavaScript. Le innerHTML sera réglé sur:

<a href="#" onclick="javascript:document.getElementById('textareax').value += ' 
TEST';">Add</a> 

qui ne fonctionne pas (une erreur de syntaxe, les chaînes JavaScript ne peuvent pas avoir des sauts de ligne littérale).

Vous aurez besoin de double évasion avec \\r\\n afin qu'il devienne \r\n quand elle est analysée par JavaScript (\\ devient \ et la r ne sera pas touché). Ensuite, le \r\n sera conservé dans le gestionnaire onclick, de sorte que la nouvelle ligne est en effet ajoutée à la zone de texte: http://jsfiddle.net/r6bhE/.

+1

Merci! Pour les futurs lecteurs: J'utilise maintenant \\ r \\ n dans la sortie php. problème était que je n'échappais pas le \ r et \ n dans la sortie php. – David19801

1

onclick="javascript:document[...] est une syntaxe incorrecte. L'attribut onclick est un événement javascript et n'a pas besoin de l'indication du schéma javascript. Vous pouvez placer simplement le script directement dans la valeur d'attribut:

<a href="#" onclick="document.getElementById('textareax').value += '\r\nTEST';">Add</a> 

Il est aussi une bonne idée de retourner une valeur lors de l'interception des événements de souris (true passer l'événement, false pour l'annuler).

Questions connexes