2009-06-24 80 views
0

我越來越沒有Javascript錯誤,但代碼什麼也不做......無法驗證用戶輸入 - onkeyup事件不觸發

function registerValidator(target, validator) { 
    var element = document.getElementById(target); 
    if (element) { 
     var validationID = element.id + "_validationResult"; 
     var validationSpan = document.createElement('span'); 
     validationSpan.id = validationID; 

     element.parentNode.appendChild(validationSpan); 

     element.onkeyup = function() { 
      var result = validator(element); 

      if (result.ok) { 
       validationSpan.innerHTML = '<img src="/media/valid.gif" width="12" />'; 
      } else { 
       validationSpan.innerHTML = '<img src="/media/invalid.gif" width="12" />'; 
       if (result.message) { 
        validationSpan.innerHTML += '<br />' + result.message; 
       } 
      } 
     }; 
     alert(1); 
    } 
} 

window.onload = function() { 
    registerValidator('username', function(element) { 
     var result = new Object(); 
     alert('validate'); 
     if (element.value.length >= 4) { 
      result.ok = true; 
     } 
     else { 
      result.ok = false; 
      result.message = "Too short"; 
     } 
     return result; 
    }); 
    alert(2); 
} 

兩個警報(1和2)正確觸發,但「驗證」警報從不觸發。該功能用於以下元素:

<input type="text" name="username" id="username" /> 

我已經在谷歌Chrome,火狐3和Internet Explorer嘗試這種8.

+1

必須有別的東西。是否還有更多相關的代碼可以發佈? – 2009-06-24 12:23:38

回答

0

糟糕。我忘了在頁面的標題中有另一個帶有「用戶名」的文本框,以允許用戶登錄。很明顯,驗證工作正常工作¬_¬

1

你的元素看起來格式不正確。 id =後實際上是否有三個引號?

+0

哎呀,不,我沒有。這是在複製pasta'ing過程中的錯誤。 (從刪除值部分)。具有事件參數的 – Aistina 2009-06-24 12:05:23

0

的onkeyup事件處理函數需要採取一個參數:

element.onkeyup = function(evt) { 

the Mozilla docs

+4

是不需要的。然而,當調用事件處理程序時,瀏覽器將_supply_事件參數。 – 2009-06-24 12:11:58

3

在這裏一切正常。看到測試頁在http://ashita.org/StackOverflow/validator.html


您目前正在使用可能被其他腳本得到重挫element.onkeyup。

嘗試使用

if (element.addEventListener) 
    element.addEventListener("keyup", validator,false); 
else if (element.attachEvent) 
    element.attachEvent("onkeyup", validator); 

參考文獻:

1

我不認爲這是有劇本的問題。我有以下的HTML對我來說完美的工作在IE8和FF你的腳本,

<html> 
<script> 
function registerValidator(target, validator) { 
    var element = document.getElementById(target); 
    if (element) { 
     var validationID = element.id + "_validationResult"; 
     var validationSpan = document.createElement('span'); 
     validationSpan.id = validationID; 

     element.parentNode.appendChild(validationSpan); 

     element.onkeyup = function() { 
      var result = validator(element); 

      if (result.ok) { 
       validationSpan.innerHTML = '<img src="/media/valid.gif" width="12" />'; 
      } else { 
       validationSpan.innerHTML = '<img src="/media/invalid.gif" width="12" />'; 
       if (result.message) { 
        validationSpan.innerHTML += '<br />' + result.message; 
       } 
      } 
     }; 
     alert(1); 
    } 
} 

window.onload = function() { 
    registerValidator('username', function(element) { 
     var result = new Object(); 
     alert('validate'); 
     if (element.value.length >= 4) { 
      result.ok = true; 
     } 
     else { 
      result.ok = false; 
      result.message = "Too short"; 
     } 
     return result; 
    }); 
    alert(2); 
} 
</script> 
<body> 
<input type="text" id="username" name="username"/> 
</body> 
</html> 

可能有一些其它的腳本試圖修改該元素的onkeyup事件處理程序。

1

我已經在Chrome和IE8本地測試過它,它工作得很好。你沒有在代碼的其他地方設置window.onload事件嗎?加載其他庫如JQuery或Prototype怎麼樣?

如果你完全沒有收到任何東西,我會期望有什麼東西重寫onload或onkeyup事件。