2010-04-29 2 views
0

этот нижеприведенный код отлично работает в Internet Explorer, но не в firefox ... я получаю сообщение об ошибке в строке firefox: document.getElementById ("поставщик_no"). Value = values_array [0]; что getElementById возвращает null. Как решить проблему?getelementbyid не работает в 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

Я отформатированный код, так что по крайней мере немного легче читать сейчас, но вы могли бы попробовать приходить с минимальным тестовым случаем? В частности, я думаю, что наличие документа (HTML/XHTML) будет необходимо, так как именно здесь определяются «элементы», которые ищет 'getElementById()'. –

+2

Можете ли вы показать нам HTML? Есть ли элемент с идентификатором «поставщик_no» на странице? Это 'id', а не' name'; Internet Explorer, возможно, все равно, но другие браузеры. – Syntactic

+0

Возможный дубликат: http://stackoverflow.com/questions/1473474/why-is-document-getelementbyid-not-working-in-firefox –

ответ

2

1) Я действительно рекомендую использовать JQuery для такого рода вещи. Вы, в основном, не выполняете большой набор элементов для пустых строк, и вместо того, чтобы писать все это, вы могли бы предоставить всем своим элементам ввода фиктивное имя класса (например, «inputClass»), а затем написать следующий код в jQuery:

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

И обновите все свои элементы, независимо от их идентификатора (на самом деле, вам даже не понадобится!). Код, который вы сейчас используете, почти не читается, и было бы больно поддерживать.

2) Firefox и IE имеют известный «quirk» - если ваши имена являются атрибутом имени элемента, а не атрибутом id элементов, тогда IE найдет его в порядке с вызовом getElementById, тогда как Firefox не будет. Убедитесь, что эти имена на самом деле являются атрибутом id для ваших элементов.

0

я приношу вам jQuery это может сэкономить много, это может быть столь же просто, как

$("#form .fieldsclass").val(""); 
Смежные вопросы