2009-12-11 56 views

回答

0
var addEvent = (function() { 
function addEventIE(el, ev, fn) { 
    return el.attachEvent('on' + ev, function(e) { 
    return fn.call(el, e); 
    }); 
} 
function addEventW3C(el, ev, fn) { 
    return el.addEventListener(ev, fn, false); 
} 
return window.addEventListener ? addEventW3C:addEventIE; 
})(); 

var domRef = document.getElementById('foo'); 

addEvent(domRef, 'change', function(e) { 
    e = e || window.event; 
    var el = e.target ? e.target : e.srcElement, 
     value = el.value; 
    alert(value) 
}); 

在IE中,event是窗口的屬性,在它的第一個參數傳遞現代DOM支持的瀏覽器。

+0

或者在jQuery中,使用e.target,它在IE的情況下設置爲srcElement。 – mahemoff 2009-12-11 22:43:30

+2

爲什麼每個Javascript問題都必須解析爲一些jQuery答案/評論? – 2009-12-11 22:50:24

+0

下決心是否至少可以解釋自己? – 2009-12-12 01:48:40

0

有兩種方法: 假設有標記

<SELECT name="ddlQuery" id="ddlQuery" style="width:273px;" 
     onchange="GetDropDownValue(event)"> 
... 

的HTML。

使用一個js函數:

function GetDropDownValue(e) 
{ 
    var rtnVal = ""; 
    var sel = document.getElementById(getTargetID(e)); 
    for (var i = 0; i < sel.options.length; ++i) { 
     if (sel.options[i].selected == true) { 
      rtnVal = sel.options[i].value; 
      break; 
     } 
    } 
    alert(rtnVal); 
    return rtnVal; 
} 

function getTargetID(e) { 

    if (!e) { var e = window.event; } 
    var objTarget = e.srcElement ? e.srcElement : e.target; 
    return objTarget.id; 
} 

另一個使用jQuery:

$('#ddlQuery').val() 
2

event.target.options[event.target.selectedIndex].value。雖然一如既往地與事件你必須已通過事件對象到一個函數,所以如:

<script> 
    function selectChanged(event) { 
     var target= event.target || event.srcElement; 
     doSomethingWith(target.options[target.selectedIndex].value); 
    }; 
</script> 

<select onchange="selectChanged(event)">...</select> 

直接設置處理程序,並使用this可能會更容易:

<select id="x">...</select> 

<script> 
    document.getElementById('x').onchange= function() { 
     doSomethingWith(this.options[this.selectedIndex].value); 
    }; 
</script> 

注意看着options[selectedIndex]是爲了與舊版瀏覽器兼容。這些日子裏,你通常可以說select.value

+0

+1這釘爲我。同樣確切的問題,但有一個下拉列表。 – 2013-01-13 16:53:24

0

IE使用srcElement大多數其他瀏覽器(包括Firefox)使用target。另外,Firefox傳遞事件對象,而IE只是填充全局事件對象w /當前事件的數據。

你必須在你的代碼中處理兩者。你如何處理第二個將取決於你如何分配處理程序。

但是,這裏有一種方法。

function changeHanlder(event) 
{ 
    var elem = event.target || event.srcElement; 
    alert(elem.options[elem.selectedIndex].value); 
} 

還值得注意的是,所有現代javascirpt庫都爲您處理這種抽象。

+0

那麼這個「e」從哪裏來?我認爲你的意思是event.target || event.srcElement。 – 2010-05-20 08:22:31

+1

@Maiku - 事實上,e從哪裏來?修正(謝謝!) – 2010-05-20 14:22:24

0

Firefox使用e.htmlEvent.target。nodeName

您可以使用try/catch來處理這兩個瀏覽器。

相關問題