jQuery获取生成的元素属性FF vs IE问题

时间:2011-09-22 14:12:14

标签: jquery cross-browser jquery-click-event

我的select-tag(filterBA)上有一个click事件,然后动态生成选项。

$("#filterBA").click(function(event){
   var $tgt = $(event.target);

   if($tgt.is('option')){
        if($tgt.attr('id') != 0){
            sortRowsByBA($tgt.attr('id'));
        }else{
            appendOrReplaceRows("replace", getSortColumn(), getAscdesc());
        }
}
});

这在Firefox中很有用......但IE不会重新确定我的$ tgt作为选项。我通过添加:

进行检查
$("#filterBA").click(function(event){
    var $tgt = $(event.target);
    alert($tgt.is('option'));
    ...

无论它返回什么错误。但是在FF中,它返回true,我按住鼠标选择其中一个选项。我不明白,因为当我必须选择在我创建的自定义选择列表中使用的div(在同一系统中)时,我使用相同的方法,但是当点击事件在标签上时它不会工作

有人知道可能出错吗?

顺便说一句。这是我生成选项的函数:

function pupulateBA(){
$selectTag = $('#nav select').html('<option id="0">Select business area</div>');
$.ajax({
    url: "ajaxBAs.cgi",
    dataType: 'json',
    success: function(jsonData){
        for(var businessIndex in jsonData){
            $selectTag.append("<option id='"+jsonData[businessIndex].id+"'>"+jsonData[businessIndex].name+"</option>");
        }
    },
    error: function(){
        alert('Ajax error retriving business areas to frontpage.');
    }
});

}

我找到了解决方案:

我是一个白痴,因为我忘记了所有关于“:选择”...... DOH!所以这是我的标签上的新事件:

$("#filterBA").change(function(){
    $('#filterBA option:selected').each(function(){
        alert($(this).attr('id'));
    });
});

这适用于选择下拉列表中动态创建的选项的FF和IE。

1 个答案:

答案 0 :(得分:1)

来自QuirksMode

  

event.target - W3C / Netscape说:目标。不,微软说,srcElement。

不积极如何解决它。请阅读QuirksMode文章,因为它提供的功能可能会或可能不会执行您希望它执行的操作,并且还指定了一些其他可能适合您的属性。虽然我希望jQuery可能有一个抽象版本,所以你不必担心IE黑客攻击。