Javascript 我使用了onchange,但是代码是在blur上启动的,而且代码在IE中不起作用

Javascript 我使用了onchange,但是代码是在blur上启动的,而且代码在IE中不起作用,javascript,html,javascript-events,Javascript,Html,Javascript Events,问题: 在Chrome和Firefox中,代码可以正常工作,但会触发事件onblur,我在键入时需要它[使用onkeyup而不是onchange解决] 这在IE中根本不起作用[通过使用选项对象解决,请参阅更新..] HTML: 要检测用户类型的变化,必须使用onkeypress事件。这里已经回答了一个类似的问题:将onpropertychange用于IE(这也将在剪切/粘贴时触发)。 此外:不应使用innerHTML来创建和插入选项。对于文本输入元素,更改事件仅在框失去焦点且值更改时触发。如果你

问题:

  • 在Chrome和Firefox中,代码可以正常工作,但会触发事件
    onblur
    ,我在键入时需要它[使用onkeyup而不是onchange解决]
  • 这在IE中根本不起作用[通过使用选项对象解决,请参阅更新..]
  • HTML:


    要检测用户类型的变化,必须使用
    onkeypress
    事件。这里已经回答了一个类似的问题:

    将onpropertychange用于IE(这也将在剪切/粘贴时触发)。

    此外:不应使用innerHTML来创建和插入选项。

    对于文本
    输入
    元素,
    更改
    事件仅在框失去焦点且值更改时触发。如果你想在用户键入时进行实时更新,你必须多听一个或多个关键事件。我认为onkeyup更好。如果你幸运的话,它可以在除IE之外的所有浏览器中工作
    onkeyup
    是解决方案。谢谢你的链接,但是为什么这在IE中不起作用?你使用的是哪个版本的IE?您是否收到任何JavaScript错误消息?
    <input type="text" onchange="getLocations(this)" />
    <select size="6" multiple="multiple" id="locationOpt"></select>
    
    function getLocations(element) {
        var locations = Array("red","green","blue");
        var location_matched = [];
    
        for ( i in locations ){
                if(locations[i].search(element.value) > -1){
                        location_matched.push(locations[i]);    
                }
        }
    
        var html = "";
        for( i in location_matched){
                html += "<option value =\"" + i + "\">" + location_matched[i] + "</option>"; 
        }
        document.getElementById("locationOpt").innerHTML = html;
    }
    
    <input type="text" onkeyup="getLocations(this)" />
    <select size="6" multiple="multiple" id="locationOpt"></select>
    
    function getLocations(element) {
        var locations = Array("red","green","blue");
        var location_matched = [];
    
        for ( i in locations ){
                if(locations[i].search(element.value) > -1){
                        location_matched.push(locations[i]);    
                }
        }
    
    var optionList = document.getElementById("locationOpt");
    
        //to remove all options
    while (optionList.options.length) {
                optionList.remove (0);
        }
    
    for( i in location_matched){
        // Option (text, value)
                var locationOption = new Option (location_matched[i], i);
                optionList.options.add (locationOption);
    }
    }