2011-04-30 3 views
1

J'ai des URL que je visite de temps en temps qui ont des numéros de pages indiqués dans le HREF. Ceux-ci changent et j'ai besoin de garder une trace du dernier visité. Je l'ai fait en coupant-coller dans un fichier texte, mais je veux le remplacer par une page HTML locale que je peux mettre à jour avec javascript. Voici un exemple que j'ai créé:Javascript HREF mise à jour

<script type="application/javascript"> 
     function update(n,newvalue) { 
      var link = document.getElementById('l' + n); 
      var href = link.getAttribute('href', 2); 
      var textfield = document.getElementById('p' + n); 
      var parts = new Array(); 
      parts = href.split('-'); 
      parts[1] = 'p' + newvalue; 
      textfield.setAttribute('value', newvalue); 
      var newhref = parts.join('-'); 
      link.setAttribute('href',newhref); 
     } 
</script> 
<form> 
    <dl> 
     <dt><a target="_blank" id="l1" href="http://foobar.org/t5-p8-data.html">Task 5 Data<a></dt> 
     <dd>Page: <input type="text" id="p1" value="8" onChange="update(1,this.value)" /> </dd> 
    </dl> 
</form> 
    </html> 

Quand j'entrer une nouvelle valeur dans le champ texte et trace à travers ce avec Firebug, il semble fonctionner très bien, à savoir le lien valeur href et la valeur textfield se changer dans les DOM , mais lorsque la fonction se termine, ils reviennent aux valeurs d'origine de la page. Qu'est-ce que je fais mal?

+0

Works pour moi dans Ix4 - j'utiliser personnellement onKeyUp au lieu de onchange – mplungjan

+0

Je pense que le type correct est 'text/javascript' - au moins c'est ce qui est utilisé pratiquement partout. – ThiefMaster

+0

Étrange. Je l'ai essayé dans Fx 3.6.17 et IE 8 et il se comporte comme indiqué. Qu'est-ce qui pourrait expliquer cela? – Steve

Répondre

0

EDIT MAJOR:

Le problème est qu'un percutant entrer dans un seul <input> dans une balise de formulaire soumettre le formulaire, donc ce qui se passe est, vous tapez dans l'entrée, appuyez sur Entrée, ce qui provoque une Blor, donc l'événement onchange se déclenche et tout se montre bien dans le débogueur. Lorsque cela se termine, la page se recharge (puisque le formulaire par défaut action est de GET la page en cours) sans scintillement, en réinitialisant la valeur d'entrée.

Solution 1: Retirez les <form> tags. L'élément de formulaire ne fait rien d'utile dans cet extrait.

Solution 2: ajoutez un attribut onsubmit=return(false) au <form>.

Solution 3: Ajouter une autre entrée non cachée à la forme.

+0

Merci, mais le même résultat. Également changé le type de script en texte/javascript. Je ne comprends pas pourquoi cela change dans le DOM pendant l'exécution du script mais ces changements ne tiennent pas quand il se termine. – Steve

+0

Etes-vous sûr que la page ne se recharge pas? Qu'est-ce que déclenche le changement, vous brouille le champ en appuyant sur entrer, le cas échéant, le javascript change il alors entrer keypress dans un '

' avec une seule entrée est à l'origine du formulaire pour soumettre rechargeant la page, car la valeur par défaut ' L'action du formulaire est la même page. –

+0

Oui, cela semble être en train de recharger la page. J'ai donc changé le script pour inclure un bouton avec onClick déclenchant la fonction au lieu de onChange dans le champ de saisie. La même chose se produit, mais peut-être que le clic sur le bouton déclenche un rechargement. Si oui, la question est quel événement pourrais-je utiliser pour déclencher le script. Il ne peut pas être sur onKeyUp comme @mplungjan suggéré, parce que je pourrais avoir à entrer deux nombres pour mettre à jour le numéro de page. – Steve