2011-08-25 8 views
0

Je reçois une erreur javascript "argument invalide" quand j'utilise parseInt(). Qu'est-ce que je fais mal?erreur parseInt(): argument invalide

La fonction est d'augmenter la taille de la police de chaque élément sur un châssis par 1

<script> 
    var sizeCounter = 1; 
    function changeFontSize(){ 
     //var elements = parent.main.document.getElementsByTagName 
     var myElements = parent.main.document.getElementsByTagName('*') 

     for (i=0;i<myElements.length;i++){ 
       if(myElements[i].style.fontSize != null){  
         var elmFontSize = myElements[i].style.fontSize + ""; 
         elmFontSize.replace("px",""); 

         if(elmFontSize != "") { 
          var elmFontSizeNum = parseInt(elmFontSize); 

         } 
          var resultSize = elmFontSizeNum + sizeCounter; 

          myElements[i].style.fontSize = resultSize + "px"; 


         //alert(myElements[i].className) 
        } 
        sizeCounter++; 
      } 
    } 


</script> 
+0

Avez-vous vérifié la valeur de 'elmFontSize' avant d'appeler' parseInt() '? Essayez 'console.log (elmFontSize)'. – Chris

+0

Cela n'est peut-être pas lié au problème, mais lorsque vous utilisez 'replace', vous ne définissez pas le résultat à quoi que ce soit: vous devez utiliser' elmFontSize = elmFontSize.replace ("px", ""); ' au lieu de 'elmFontSize.replace (" px "," ");'. –

+0

essayez d'alerter ** elmFontSize ** avant d'analyser et de vérifier la valeur. – mithunsatheesh

Répondre

1

Il y a beaucoup de problèmes. Voici une suggestion pour simplifier/réécriture de votre fonction:

function changeFontSize(sizeCounter){ 
sizeCounter = sizeCounter || 1; 
var myElements = document.getElementsByTagName('*'), currentFontSize = 0; 
for (i=0;i<myElements.length;i++){ 
    var fsNow = getStyle(myElements[i],'font-size'); 
    if (fsNow){ 
    currentFontSize = Number(fsNow.replace(/[^\d]/g,'')); 
    myElements[i].style.fontSize = (currentFontSize + sizeCounter) + 'px'; 
    } 
} 
} 

getStyle est:

function getStyle(el,styleProp) 
{ 
    el = /string/i.test(typeof el) ? document.getElementById(el) : el; 
    if (!el){return null;} 
    var result; 
    if (el.currentStyle){ 
    return el.currentStyle[styleProp]; 
    } 
    else if (window.getComputedStyle){ 
    return document.defaultView.getComputedStyle(el,null) 
      .getPropertyValue(styleProp); 
    } 
    return null; 
} 

Voir this jsfiddle

+0

merci mal essayer de l'implémenter et de revenir à vous – code511788465541441

+0

cela ne fonctionne pas. fsNow est toujours "indéfini" je suppose que c'est parce que la taille de la police sur ma page web (pas la mienne) n'est pas explicitement définie, elle utilise des classes css. style.fontSize renvoie une chaîne vide pour tous les éléments. – code511788465541441

+0

Ça devrait marcher. Voici un jsfiddle utilisant les mêmes fonctions, encapsulé dans un objet. Cette fois, il n'y a pas de taille de police explicite dans un élément html. Cliquez sur le bouton et voir les polices se développent @ http://jsfiddle.net/aCqVZ/ – KooiInc

0

parseInt prend une chaîne comme premier paramètre, vous voudrez peut-être faire en sorte que elmFontSize est en fait une chaîne en utilisant typeof(elmFontSize). Si ce n'est pas une chaîne, vous pouvez le transformer en chaîne avant d'appeler la fonction parseInt.

0

Vous ne gérez que "px" et la taille de la police n'est pas nécessairement une valeur "px". Si c'est par exemple "em" alors parseInt échouera parce qu'il essaie de convertir une valeur non numérique.

+1

Ce n'est pas correct. 'parseInt' peut gérer des chaînes comme' 20em' dans chaque navigateur auquel j'ai accès (Chrome, Safari, FF). –

+0

Vous avez raison Matt. parseInt le gère. – Karlth

Questions connexes