2011-03-06 57 views
18

我有一個onblur事件監聽器輸入標籤:模糊()與的onblur()

<input id="myField" type="input" onblur="doSomething(this)" /> 

通過JavaScript,我要觸發這個輸入模糊事件,以便它,反過來,調用doSomething函數。

我最初的想法是調用模糊:

document.getElementById('myField').blur() 

但是,這並不正常工作(儘管沒有錯誤)。

這並不:

document.getElementById('myField').onblur() 

這是爲什麼? .click()將通過onclick監聽器調用附加到元素的點擊事件。爲什麼blur()工作方式不同?

+1

我認爲blur()是jQuery,onBlur()是Javascript。 – Ray 2011-03-06 19:08:26

+0

@Ray不,這並不準確,儘管jQuery提供了一個「blur」方法來觸發一個事件(或註冊一個處理程序)。但是,該方法由jQuery對象提供,並且在純DOM元素上不可用。 – Pointy 2011-03-06 19:12:22

回答

23

此:

document.getElementById('myField').onblur(); 

作品,因爲你的元素(<input>)有一個名爲 「的onblur」,它的值是一個函數的屬性。因此,你可以稱它。你是而不是告訴瀏覽器模擬實際的「模糊」事件,但是;例如,沒有創建事件對象。

元素沒有「模糊」屬性(或「方法」或其他),所以這就是爲什麼第一件事不起作用。

+0

但是你可以調用.click()模擬一個點擊事件,對嗎?我的錯誤是假設.blur()也存在。感謝你的回答! – 2011-03-06 19:15:24

+3

@DA:'.blur()'在一些瀏覽器中確實存在,但是如果它沒有它,你首先需要給予元素焦點。 [試試這個例子](http://jsfiddle.net/zYQqa/1/)在Chrome中。我不知道哪些瀏覽器支持/不支持。 – user113716 2011-03-06 19:16:46

+1

是的,因爲瀏覽器**不支持DOM元素的方法,稱爲「點擊」。我同意這只是不一致;許多這些事情在10年或更早之前迅速發展,然後纔有人有機會思考同步問題。我認爲這是像Prototype和jQuery這樣的圖書館非常流行的主要原因之一。 – Pointy 2011-03-06 19:17:04

2

我想這只是因爲onblur事件被稱爲結果輸入失去焦點的,沒有與輸入相關聯,一個模糊動作好像有一個相關的點擊行動按鈕

10

與尖尖的說法相反,blur()方法確實存在,並且是w3c standard的一部分。下面的exaple將在所有現代瀏覽器(包括IE)工作:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
    <head> 
     <title>Javascript test</title> 
     <script type="text/javascript" language="javascript"> 
      window.onload = function() 
      { 
       var field = document.getElementById("field"); 
       var link = document.getElementById("link"); 
       var output = document.getElementById("output"); 

       field.onfocus = function() { output.innerHTML += "<br/>field.onfocus()"; }; 
       field.onblur = function() { output.innerHTML += "<br/>field.onblur()"; }; 
       link.onmouseover = function() { field.blur(); }; 
      }; 
     </script> 
    </head> 
    <body> 
     <form name="MyForm"> 
      <input type="text" name="field" id="field" /> 
      <a href="javascript:void(0);" id="link">Blur field on hover</a> 
      <div id="output"></div> 
     </form> 
    </body> 
</html> 

請注意,我用link.onmouseover代替link.onclick,因爲否則單擊本身將已刪除的焦點。