window.event.srcElement.options(window.event.srcElement.selectedIndex).value
适用于Internet Explorer(和Chrome),但不适用于FireFox。如何在FireFox中使这个工作?
答案 0 :(得分: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
。
答案 1 :(得分: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支持的浏览器中,它作为第一个参数传递。
答案 2 :(得分: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()
答案 3 :(得分:0)
Firefox中没有全局event
对象。事件作为参数传递给它们的处理程序。另外,您需要srcElement
而不是target
。
如果您使用jQuery之类的javascript库,则会为您处理所有特定于浏览器的怪癖。
否则,我建议你阅读这些文章
答案 4 :(得分:0)
IE使用srcElement
大多数其他浏览器(包括Firefox)使用target
。
此外,Firefox传递事件对象,而IE只是用当前事件的数据填充全局事件对象。
您必须同时处理代码。你如何处理第二个将取决于你如何分配处理程序。
但这是一种方式。
function changeHanlder( event )
{
var elem = event.target || event.srcElement;
alert( elem.options[elem.selectedIndex].value );
}
值得注意的是,所有现代的javascirpt库都会为您处理这种抽象。
答案 5 :(得分:0)
Firefox使用e.htmlEvent.target.nodeName
您可以使用 try / catch 来处理这两种浏览器。