2010-04-29 8 views
0

ce code mentionné ci-dessous fonctionne parfaitement dans Internet Explorer mais pas dans Firefox ... j'obtiens une erreur dans la ligne dans firefox: document.getElementById ("supplier_no"). Value = values_array [0]; que getElementById renvoie null. Comment résoudre le problème?getelementbyid ne fonctionne pas dans firefox


var winName;  //variable for the popup window 
var g_return_destination = null ; //variable to track where the data gets sent back to. 


// Set the value in the original pages text box. 
function f_set_home_value(as_Value) 
{ 
if (document.getElementById(g_return_destination[0]).name == "netbank_supplier_name_info") 
{ 
    //clear the old values 
    for (selnum = 1; selnum <= 5; selnum++) 
    { 
    document.getElementById("expense_account"+selnum).value = ""; 
    document.getElementById("expense_account_name"+selnum).value = ""; 
    document.getElementById("expense_vat_flag"+selnum).value = "off"; 
    document.getElementById("expense_vat_flag"+selnum).checked = ""; 
    document.getElementById("expense_vat_amount"+selnum).value = ""; 
    document.getElementById("expense_vat_code"+selnum).value = ""; 
    document.getElementById("expense_period"+selnum).value = ""; 
    document.getElementById("expense_date"+selnum).value = ""; 
    if (selnum!=1) {//these are sometimes defaulted in, and in any case you will always have line1 
    document.getElementById("expense_more_dept"+selnum).value = ""; 
    document.getElementById("expense_more_prj"+selnum).value = ""; 
    document.getElementById("expense_more_subj"+selnum).value = ""; 
    } 
    document.getElementById("expense_amount"+selnum).value = ""; 
    } 
    var values_array = as_Value[0].split("!"); 
    document.getElementById("supplier_no").value= values_array[0]; 
    document.getElementById("supplier_bankAccount_no").value= values_array[1]; 
    str = values_array[2] ; 
    str = str.split(";sp;").join(" "); 
    document.getElementById("default_expense_account").value= str; 
    document.getElementById("expense_account1").value= str; 
    document.getElementById("expense_more_sok1").disabled= false; 
    str = values_array[3] ; 
    str = str.split(";sp;").join(" "); 
    document.getElementById("payment_term").value= str; 
    strPeriod = calcPeriod(str,document.getElementById("due_date").value); 
    document.getElementById("expense_period1").value = (strPeriod); 
    strExpenseDate = calcExpenseDate(str,document.getElementById("due_date").value); 
    document.getElementById("expense_date1").value = (strExpenseDate); 
    str = values_array[4] ; 
    str = str.split(";sp;").join(" "); 
    document.getElementById("expense_account_name1").value= str; 
    str = values_array[5] ; 
    str = str.split(";sp;").join(" "); 
    document.getElementById("expense_vat_code1").value= str; 
    if (str == 0) { 
    document.getElementById("expense_vat_flag1").checked= ''; 
    document.getElementById("expense_vat_flag1").disabled= true; 
    }else{ 
    document.getElementById("expense_vat_flag1").checked= 'yes'; 
    document.getElementById("expense_vat_flag1").value= 'on'; 
    document.getElementById("expense_vat_flag1").disabled= false; 
    } 
    str = values_array[6] ; 
    str = str.split(";sp;").join(" "); 
    document.getElementById("supplier_name").value= str; 
    var str = values_array[7]; 
    str = str.split(";sp;").join(" "); 
    str = str.split("&cr;").join("\r"); 
    document.getElementById("netbank_supplier_name_info").value= str; 
    strx = justNumberNF(document.getElementById("amount").value); 
    document.all["expense_vat_amount1"].value = NetbankToDollarsAndCents(strx * (24/124)) ; 
    document.getElementById("amount").value=NetbankToDollarsAndCents(strx); 
    document.getElementById("expense_amount1").value = document.getElementById("amount").value; 

    document.getElementById("expense_amount2").value = ''; 
    document.getElementById("expense_account2").value= ''; 
    //document.getElementById("expense_vat_flag2").value= ''; 
    document.getElementById("expense_vat_amount2").value= ''; 
    document.getElementById("expense_amount3").value = ''; 
    document.getElementById("expense_account3").value= ''; 
    //.getElementById("expense_vat_flag3").value= ''; 
    document.getElementById("expense_vat_amount3").value= ''; 
    document.getElementById("expense_amount4").value = ''; 
    document.getElementById("expense_account4").value= ''; 
    //document.getElementById("expense_vat_flag4").value= ''; 
    document.getElementById("expense_vat_amount4").value= ''; 
    document.getElementById("expense_amount5").value = ''; 
    document.getElementById("expense_account5").value= ''; 
    //document.getElementById("expense_vat_flag5").value= ''; 
    document.getElementById("expense_vat_amount5").value= ''; 
    str = values_array[8] ; 
    str = str.split(";sp;").join(" "); 
    if (str=="2"){ 
    document.frmName.ButtonSelPeriodisering1.disabled=false; 
    document.frmName.ButtonSelPeriodisering1.click(); 
    } 
    winName.close(); 
} 
} 

//Pass Data Back to original window 
function f_popup_return(as_Value) 
{ 
var l_return = new Array(1); 
l_return[0] = as_Value; 

f_set_home_value(l_return); 
} 

function justNumberNF(val){ 
     val = (val==null) ? 0 : val; 
     // check if a number, otherwise try taking out non-number characters. 
     if (isNaN(val)) { 
      var newVal = parseFloat(val.replace(/[^\d\.\-]/g, '.')); 
    // check if still not a number. Might be undefined, '', etc., so just replace with 0. 
      return (isNaN(newVal) ? 0 : newVal); 
     } 
     // return 0 in place of infinite numbers. 
     else if (!isFinite(val)) { return 0; } 

     return val; 
}; 
function NetbankToDollarsAndCents(n) { 
var s = "" + Math.round(n * 100)/100 ; 
var i = s.indexOf('.') ; 
if (i < 0) {return s + ",00" } ; 
var t = s.substring(0, i + 1) + s.substring(i + 1, i + 3) ; 
if (i + 2 == s.length) {t += "0"} ; 
return t.replace('.',',') ; 
} 
+2

Je formaté votre code, il est donc au moins un peu plus facile à lire maintenant, mais pourriez-vous essayer de venir avec un cas de test minimal? En particulier, je pense qu'il sera nécessaire d'avoir le document (HTML/XHTML) disponible, puisque c'est là que sont recherchés les "éléments" que 'getElementById()' recherche. –

+2

Pouvez-vous nous montrer le code HTML? Y a-t-il un élément avec un identifiant de "fournisseur_non" sur la page? C'est 'id', pas' name'; Internet Explorer ne s'en soucie peut-être pas, mais d'autres navigateurs le font. – Syntactic

+0

Possible duplicate: http://stackoverflow.com/questions/1473474/why-is-document-getelementbyid-not-working-in-firefox –

Répondre

2

1) Je vous recommande vraiment en utilisant jQuery pour ce genre de chose. Vous êtes fondamentalement en défaut d'un grand ensemble d'éléments pour la chaîne vide, et au lieu d'avoir à écrire tout cela, vous pouvez donner à tous vos éléments d'entrée un nom de classe faux (comme 'inputClass') et écrire le code suivant dans jQuery:

$('.inputClass').val(''); 

Et d'avoir tous vos éléments mis à jour, quel que soit leur identifiant (en fait, vous n'en auriez même pas besoin!). Le code que vous avez actuellement est presque illisible, et serait douloureux à maintenir. 2) Firefox et IE ont un «bizutage» connu - si vos noms sont l'attribut name de l'élément, et non l'attribut id des éléments, alors IE le trouvera très bien avec un appel getElementById, contrairement à Firefox. Vérifiez que ces noms sont bien l'attribut id de vos éléments.

0

je vous apporte jQuery cela peut vous faire économiser beaucoup, il pourrait être tout aussi simple que

$("#form .fieldsclass").val(""); 
Questions connexes