【问题标题】:Why is my input tag losing focus immediately after getting it?为什么我的输入标签在得到它后立即失去焦点?
【发布时间】:2015-08-04 21:02:20
【问题描述】:

根据设计,菜单容器 onblur 事件应在输入获得焦点时禁用,并在输入失去焦点时(即用户完成输入时)重新启用。

function pauseHiding(hiderId) {
    var hider = document.getElementById(hiderId);
    hider.onblur = null;
}

function resumeHiding(hiderId, timeout) {
    var hider = document.getElementById(hiderId);
    hider.onblur = "setTimeout(function(){hideMenu(hiderId);}, timeout);";
    hider.focus();
}

实际上,input 的 onfocus 事件是正常触发的,但紧随其后的是 onblur 事件。此外,onfocus 会删除菜单容器的 onblur 事件,但 input 的 onblur 不会将其返回。 https://jsfiddle.net/2dxre6nz/4/

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    在您的 showMenu() 函数中,您必须删除 focus() 使用

    function showMenu(containerId) {
        var el = document.getElementById(containerId);
        var setVisible = function(element){
            if (element.tagName == 'A') element.style.display = 'inline';
            else
                if (element.tagName != 'SCRIPT' && element.tagName != 'STYLE') element.style.display = 'block';
            };
        iterateChildren(el, setVisible);
            //el.focus();
    }
    

    您在主 div 中设置 onclick="showMenu('userbody')",因此每次点击都会改变您的焦点

    【讨论】:

    • 第一次点击输入只有blur事件,第二次点击div有blur事件
    • 如何避免两次点击模糊?尝试将document.getElementsByName(senderName)[0].blur(); 添加到输入的 onblur 处理程序,但似乎没有任何改变。
    猜你喜欢
    • 2023-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 2020-09-09
    • 2021-12-14
    相关资源
    最近更新 更多