window.event.srcElement.options不适用于FF

时间:2009-12-11 22:32:23

标签: javascript

window.event.srcElement.options(window.event.srcElement.selectedIndex).value适用于Internet Explorer(和Chrome),但不适用于FireFox。如何在FireFox中使这个工作?

6 个答案:

答案 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 来处理这两种浏览器。