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处理。

基于STM32F407,使用DFS算法实现最短迷宫路径检索,分为三种模式:1.DEBUG模式,2. 训练模式,3. 主程序模式 ,DEBUG模式主要分析bug,测量必要数据,训练模式用于DFS算法训练最短路径,并将最短路径以链表形式存储Flash, 主程序模式从Flash中….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值