2010-02-19 108 views
2

嗨,我的腳本在Firefox中有問題,我得到了錯誤,「window.event是未定義的」,哪裏似乎是問題?JavaScript不工作在Firefox

<script language="JavaScript1.2"> 

function formattel(){ 

var value = document.formkkush.telefoon.value; 
var valueLen = document.formkkush.telefoon.value.length; 

if(valueLen>2 && valueLen<4) 
{ 
if(window.event.keyCode==8) 
document.formkkush.telefoon.value=document.formkkush.telefoon.value.remove(valueLen-1,1); 
else 
document.formkkush.telefoon.value=document.formkkush.telefoon.value+"/"; 
} 
if(valueLen>5 && valueLen<7) 
{ 
if(window.event.keyCode==8) 
document.formkkush.telefoon.value=document.formkkush.telefoon.value.remove(valueLen-1,1); 
else 
document.formkkush.telefoon.value=document.formkkush.telefoon.value+"."; 
} 
if(valueLen>8 && valueLen<10) 
{ 
if(window.event.keyCode==8) 
document.formkkush.telefoon.value=document.formkkush.telefoon.value.remove(valueLen-1,1); 
else 
document.formkkush.telefoon.value=document.formkkush.telefoon.value+"."; 
} 
} 
+2

該腳本標記是否真的關閉,而您沒有粘貼它?不要使用已棄用的'language'屬性。 Javascript腳本標籤應該包含一個MIME類型:''。爲什麼你使用/指定Javascript 1.2?這是從1997年開始的。 – 2010-02-19 15:24:33

回答

3

全局事件對象不是在Firefox中創建的。它是作爲事件處理函數的第一個參數傳遞的。

function formattel(eventObj){ 
    var value = document.formkkush.telefoon.value; 
    var valueLen = document.formkkush.telefoon.value.length; 

    // Make sure we have the even object no matter which browser we're running on 
    eventObj = eventObj || window.event; 

    if(valueLen>2 && valueLen<4) 
    { 
    if(eventObj.keyCode==8) 
     document.formkkush.telefoon.value=document.formkkush.telefoon.value.remove(valueLen-1,1); 
    else 
     document.formkkush.telefoon.value=document.formkkush.telefoon.value+"/"; 
    } 
    // etc... 
} 

查看Mozilla文檔event

作爲一個完全不相關的建議,您應該嘗試通過對變量進行重複查找來減少DOM節點查找次數。它使你的代碼更快和更像樣:

function formattel(eventObj){ 

    var telefoon = document.formkkush.telefoon; 
    var value = telefoon.value; 
    var valueLen = value.length; 

    // Make sure we have the even object no matter which browser we're running on 
    eventObj = eventObj || window.event; 

    if(valueLen>2 && valueLen<4) 
    { 
    if(eventObj.keyCode==8) 
     telefoon.value = telefoon.value.remove(valueLen-1,1); 
    else 
     telefoon.value += "/"; 
    } 
    // etc... 
} 

不要忘記賦值運算符(如+=)呢!

+0

nope它不工作對不起 – Dave 2010-02-19 15:39:51

+0

@Dave:不需要道歉:-)如果函數'formattel'是函數的事件處理函數,我發佈的答案是處理事件對象的正確方法。閱讀Mozilla文檔,瞭解我發佈的事件,它可以幫助您確定哪裏出錯。 – 2010-02-19 15:44:34

+0

不要忘記檢查window.event對象。 – 2010-02-19 18:05:28