window.event.srcElement.options(window.event.srcElement.selectedIndex).value
適用於Internet Explorer(和Chrome),但不適用於FireFox。如何在FireFox中完成這項工作?window.event.srcElement.options不適用於FF
回答
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支持的瀏覽器。
有兩種方法: 假設有標記
<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()
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
。
+1這釘爲我。同樣確切的問題,但有一個下拉列表。 – 2013-01-13 16:53:24
Firefox中沒有全局event
對象。事件作爲參數傳遞給他們的處理程序。此外,而不是srcElement
,您尋找target
。
如果您使用像jQuery這樣的JavaScript庫,所有瀏覽器特定的怪癖都會爲您處理。
否則,我建議你閱讀這些文章
IE使用srcElement
大多數其他瀏覽器(包括Firefox)使用target
。另外,Firefox傳遞事件對象,而IE只是填充全局事件對象w /當前事件的數據。
你必須在你的代碼中處理兩者。你如何處理第二個將取決於你如何分配處理程序。
但是,這裏有一種方法。
function changeHanlder(event)
{
var elem = event.target || event.srcElement;
alert(elem.options[elem.selectedIndex].value);
}
還值得注意的是,所有現代javascirpt庫都爲您處理這種抽象。
那麼這個「e」從哪裏來?我認爲你的意思是event.target || event.srcElement。 – 2010-05-20 08:22:31
@Maiku - 事實上,e從哪裏來?修正(謝謝!) – 2010-05-20 14:22:24
Firefox使用e.htmlEvent.target。nodeName
您可以使用try/catch來處理這兩個瀏覽器。
- 1. Highcharts「stemWidth」不適用於FF
- 2. 過渡不適用於FF
- 3. JavaScript適用於IE + Chrome,但不適用於FF
- 4. JQuery $ .ajax請求適用於IE,但不適用於FF和Chrome
- 5. jQuery不適用於FF,但適用於Chrome
- 6. Kendo Grid excel導出不適用於27K記錄的Chrome,但適用於FF
- 7. Selenium Testing HTTPs Trust所有證書都適用於FF但不適用於IE
- 8. 設置不適用於FF或Safari的HTML5視頻
- 9. jQuery $ .getJSON不在IE中發送請求(適用於FF和Chrome)
- 10. jquery:爲什麼不透明動畫僅適用於FF?
- 11. 在Chrome/FF中工作的CSS樣式但不適用於IE8
- 12. 這種佈局適用於Chrome,FF,IE10 ...但不是Edge?
- 13. Facebook JS + FLASH SDK:適用於不在FF,Chrome的IE瀏覽器
- 14. 按鍵事件不適用於IE和Chrome,但在FF工作
- 15. 風格不適用於FF,但在鉻上
- 16. 通過CSS對文本的漸變效果不適用於FF
- 17. @ font-face不適用於ff,chrome和safari(在mac上)
- 18. JQuery Datepicker只適用於IE8(不適用Firefox,不適用於我)
- 19. ImageIO.read()適用於FileInputStream,不適用於HttpInputStream
- 20. Javascript適用於Firefox,不適用於IE8?
- 21. 文件上傳在IE中不起作用,但適用於FF,Chrome和Safari
- 22. Flexbox按鈕:適用於Chrome和Edge,在FF中打破
- 23. fancybox只適用於鉻和FF中的最後一張圖片
- 24. 如何使此getElementsbyName適用於IE(和FF)?
- 25. 媒體播放器控制只適用於IE瀏覽器(不是FF/Chrome)
- 26. onclick on動畫提交按鈕只適用於FF(不IE或OP)
- 27. 適用於iOS的Crosswalk適用於iOS不適用iOS SDK 10.1.1
- 28. +不適用於grep
- 29. 不適用於LINQ?
- 30. jQuery $ .ajax適用於$ .post不適用
或者在jQuery中,使用e.target,它在IE的情況下設置爲srcElement。 – mahemoff 2009-12-11 22:43:30
爲什麼每個Javascript問題都必須解析爲一些jQuery答案/評論? – 2009-12-11 22:50:24
下決心是否至少可以解釋自己? – 2009-12-12 01:48:40