IE bug记录

今天是个悲催的日子,chrome实现的非常好,到了IE确实异常痛苦,调了一天,终于调好了。有必要对此进行记录。

html部分代码:

<div class="search" data-city="{{$city}}">
      <form class="index-search" action="/bj/ershouche">
          <input placeholder="请输入关键词,如:别克 1.6L" name="keyword" class="search-text" autocomplete="off" id="search_text">
          <div class="search-button"><button class="search-submit"></button></div>
      </form>
</div>


js部分代码:

var city = $(".search").data('city');
    var selectedItem = -1;
    var index_search_content = $('<div class="index-search-content"></div>').hide().insertAfter('.index-search');
    var searchInput = $('#search_text');
    var clear = function(){
        setTimeout(function () {
            index_search_content.empty().hide();
            setSelectedItem(0);
        }, 500);        
    };

    var setSelectedItem = function(item){
        //更新索引變量
        selectedItem = item ;
        //按上下鍵是循環顯示的,小於0就置成最大的值,大於最大值就置成0
        if(selectedItem < 0){
            selectedItem = index_search_content.find('.list').length - 1;
        }else if(selectedItem > index_search_content.find('.list').length-1 ) {
            selectedItem = 0;
        }
        //首先移除其他列表項的高亮背景,然後再高亮當前索引的背景
        index_search_content.find('.list').removeClass('hover').eq(selectedItem).addClass('hover');
    };

    $(".search-text").on('focus', function (evt) {
        $(this).data('editing', true);
        $.getJSON("/index.php?d=api&c=car_search&m=index&type=get_hot_info", function(result) {
            index_search_content.empty();
            $('<span class="list-title">大家都在搜</span>').appendTo(index_search_content);
            if (result.status === 0 && result.data) {
                $.each(result.data, function(key,val) {
                
                    $('<span class="list"><a class="list-url" href="/'+ city +'/ershouche?keyword=' + val +'">' + val + '</a></span>').appendTo(index_search_content)
                        .hover(function() {
                            $(this).siblings('span').removeClass('hover');
                            $(this).addClass('hover');
                        }, function() {
                            $(this).removeClass('hover');
                            selectedItem = -1;
                        });
                });
            }

        });        

        $(this).css({'border':'1px solid #e14800', 'border-right':'none', 'outline':'0'});
        $('.search-button').css({'border':'1px solid #e14800', 'border-left':'1px solid #ccc'});
        $(".index-search-content").css('display', 'block');        

    }).on('propertychange', function (evt) {

        if ($(this).val() && $(this).data('editing')) {
            var url = "/index.php?d=api&c=car_search&m=index&type=get_info&words="+encodeURIComponent($(this).val()) + "&num=" +Math.round(Math.random()*1000000)
            $.getJSON(url, function(result) {
                index_search_content.empty();
                if (result.status === 0 && result.data) {
                    $.each(result.data, function(key, val) {
                        $('<span class="list"><a class="list-url" href="/'+ city +'/ershouche?keyword=' + val +'">' + val + '</a></span>').appendTo(index_search_content)
                            .hover(function (evt) {
                                $(this).siblings('span').removeClass('hover');
                                $(this).addClass('hover');

                            }, function() {
                                $(this).removeClass('hover');
                                selectedItem = -1;
                            }).click(function(event) {
                                selectedItem = -1;
                            });
                                                   
                    });
                } else if (result.status === -1 && result.data) {
                    $.each(result.data, function(key, val) {
                        $('<span class="list-title">' + val + '</span>').appendTo(index_search_content);
                    });
                }


            });  
            
            $(this).data('editing', true);
        }
    }).on('input', function (evt) {
        
        $.getJSON("/index.php?d=api&c=car_search&m=index&type=get_info&words="+encodeURIComponent($(this).val()), function(result) {
            index_search_content.empty();
            if (result.status === 0 && result.data) {
                $.each(result.data, function(key, val) {
                    $('<span class="list"><a class="list-url" href="/'+ city +'/ershouche?keyword=' + val +'">' + val + '</a></span>').appendTo(index_search_content)
                        .hover(function() {
                            $(this).siblings('span').removeClass('hover');
                            $(this).addClass('hover');
                        }, function() {
                            $(this).removeClass('hover');
                            selectedItem = -1;
                        }).click(function(event) {
                            selectedItem = -1;
                        });
                });
            } else if (result.status === -1 && result.data) {
                $.each(result.data, function(key, val) {
                    $('<span class="list-title">' + val + '</span>').appendTo(index_search_content);
                });
            }
            
        });  

    }).on('blur', function (evt) {
        clear();
        
        $(this).css({'border':'1px solid #ccc', 'border-right':'none'});
        $('.search-button').css({'border':'1px solid #ccc', 'border-left':'1px solid #ccc'});
        $(this).data('editing', false);
    });

    searchInput.keyup(function(event) {
        var e = window.event || event;
        

        if( event.keyCode == 40 || event.keyCode == 38) {
            $(".search-text").data('editing', false);
        }

        if( event.keyCode == 46 || event.keyCode == 8) {
            $(".search-text").data('editing', true);
        }

        if(e.keyCode == 40) {
            if(selectedItem == -1) {
                setSelectedItem(0);
            } else {
                setSelectedItem(selectedItem +1);
            }
            $('.list:eq(' + selectedItem + ')').addClass('hover').siblings('span').removeClass('hover');
            $('.search-text').val($('.list:eq(' + selectedItem + ')').text());

        } else if (e.keyCode == 38) {

            if(selectedItem < 0) {
                setSelectedItem(index_search_content.find('.li').length -1);
            } else {
                setSelectedItem(selectedItem - 1);
            }

            $('.list:eq(' + selectedItem + ')').addClass('hover').siblings('span').removeClass('hover');
            $('.search-text').val($('.list:eq(' + selectedItem + ')').text());
        }

    });

 


技巧一:

$(‘<span>’).appendto(),, 好处胜过 ().append(span), 

原因分析:可以在后面加上hover click等常见事件,而append则需要在外面重新查找span元素进行加载。

 

Bug one:

Ie进行ajax处理时,通过fidder发现,会有一系列相同请求,很快导致ie崩溃。不仅崩溃,index_search_content中的a标签不能点击跳转。

原因分析:ajax为异步调用,一系列相同请求,会导致index_search_content中无法正确加载a标签,从而使a标签无法绑定点击事件,跳转失败。

解决办法:在ajax请求的url后面,加上 &num=Math.random()*1000000; 加上随机参数,如此ajax就不会加载n个相同的请求,保证了index_search_content中的数据正确加载。

 

Bug two:

Propertychangeinput

ie中监听input元素变化,可以使用事件propertychange,chrome中则是input.

但是在iepropertychange中,有个bug

原因分析:当有个功能为使用上下键移动index_search_contentspan时,会将所选择的span中的文字添加到input中,在ie中,这种行为也会认定为是输入框改变,而在chrome中,则只有想input中打字才会认定为是输入框改变。

解决方法:当键盘发生上下操作时,将输入框加上一个数据,如$(‘input’).data(‘editing’,’false’)。在对propertychange进行事件处理时,判断editing的值,为真,则进行ajax的处理,否则不执行ajax处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值