一个按钮,btn
一个下拉,sel
btn.onclick = function(){
    //do sth;
    sel.onchange();
}sel.onchange = function(event){
    var evt = window.event || event;
    var tgt = evt.srcElement || evt.target;    //IE下 tgt = btn ,evt.type = click
    //FF下 tgt = sel ,evt.type = onchange}
这太郁闷了,我在asp.net下工作,我的dropdownlist用了一个jquery插件,这个插件按照原来的select生成了div+a标签来模拟dropdownlist,而且,在点击a标签的时候引发dropdownlist的onchange事件。当我用了asp.net的验证控件,问题出现了,asp.net自动为验证控件写了一些客户端代码,代码的出问题的部分就是判断
event的target或者srcElement是谁,正常情况下,如果是select自己引发了onchange,那么这个时候target和srcElement
都正常指向select,但是现在是点击a标签时触发的,IE下就有问题了,它的srcElement指向了a标签元素,而在FF下,一切正常。出现这个问题,我改怎么办,如果我放弃。net自带的验证控件的话,项目中好多地方都用了,不好改啊
放弃我的dropdownlist的话,,,好多效果又实现不了,怎么办

解决方案 »

  1.   

    那就在js里判断一下是否是IE,如果是IE那么就把对象指向srcElement的父元素吧
    var obj=srcElement.parentNode;
      

  2.   

    既然你用了 jQuery 建议你将代码改为这样试一下:$("#btn").click(function(){
        $("#sel").triggerHandler("change"); //或 $("#sel").change();
    });$("#sel").change(function(event){
        var tgt = $(this);
    }
      

  3.   

    将change方法单独提出, 然后在不同的监听事件中调用同一个方法.既然你已经知道了每个浏览器下触发的target, 那么工作就会简单起来~:1. 可以判断浏览器, 然后在不同浏览器分支下写监听~
    2. 或者可以判断target, 如果是a, 则用select来替换掉, 作为参数传入那个共有方法.
      

  4.   

    那我可以这样写?if(ie)
    {
        window.event.srcElement = mySelectElement;
        window.event.type = change;}
    因为.net自动为验证控件写的代码我肯定改动不了,所以我只能给它准备正确的srcElement了,只能在触发change后改动event了