【问题标题】:How can I trigger onblur from a ul li?如何从 ul li 触发 onblur?
【发布时间】:2013-07-13 20:32:14
【问题描述】:

我本质上是在单击时突出显示每个 li,并希望在单击其他地方或跳出时“取消突出显示”单击的 li(通过影响 background-color 属性)。

这种行为本质上是在模仿 <select> 的突出显示行为......不过,我使用 select,因为我想将 HTML 嵌套在列出的项目中 -- 你不能使用<option>做到这一点。

我正在尝试使用onblur,但它不起作用...

这是 HTML:

<ul id = "list">
    <li>asdf</li>
    <li>qwerty</li>
<ul>

...这是CSS:
    #list {
        list-style-type: none;
    }

...这里是 jQuery/Javascript:

    function getEventTarget(e) {
        e = e || window.event;
        return e.target || e.srcElement; 
    }

    function highlightSelection(selection) {
        alert("It worked!");
        $(selection).css("background-color","#FFFF00");
    }

    // this function is not being triggered:
    function removeHighlight(selection) {
        $(selection).css("background-color","none");
    }

    var ul = document.getElementById("list");

    ul.onclick = function(event) {
        var target = getEventTarget(event);
        highlightSelection(target);
    };

    // this event is not working:
    ul.onblur = function(event) {
        var target = getEventTarget(event);
        removeHighlight(target);
    };

【问题讨论】:

    标签: javascript jquery css dom-events html-lists


    【解决方案1】:

    既然您已经在使用 JQuery...

    <ul id = "list">
         <li tabindex="1">asdf</li>
         <li tabindex="2">qwerty</li>
     <ul>
    
    
    var ul = $("#list");
    ul.on('click focus','li',function(){
        $(this)
            .css("background-color","#FFFF00")
            .siblings().css('background','');
    }).on('blur','li',function(){
        $(this).css('background','');
    });
    

    http://jsfiddle.net/mc4tN/2/

    我不确定当您离开列表项时您想要什么效果...看来您只想让它突出显示。您可以通过为列表项添加tabindex 属性来为其添加焦点功能。

    【讨论】:

    • 太棒了,谢谢@Bluetoft!我如何使用addClassremoveClass 而不是css 来做到这一点?
    【解决方案2】:

    lis 没有blur,因为他们不专注。试试mouseoutmouseleave

    【讨论】:

    • 感谢@Dek Dekku 的快速回复,是否可以将焦点设置在点击的li 上?
    • 现在我看起来好多了,你实际上是在 ul 上设置监听器。
    • 好的,我几乎明白了——将tabindex = "1" 属性添加到ul,或者任何整数赋值,都会给li 的焦点。 但是,这个技巧不允许一次只高亮一个li
    • 从 highlightSelection 中调用 removeHighlight 方法来移除上一个选中项的高亮,他们将其设置在新目标上。
    • 是的,你可以保存它(我想现在可以使用全局变量,但是用闭包保护范围会更好)并调用它的方法。否则,重写 remove 方法以从所有“li”中删除该类,而不仅仅是目标:这样效率较低,但更安全。
    猜你喜欢
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 2013-10-27
    • 1970-01-01
    • 2021-11-14
    • 2012-11-21
    • 1970-01-01
    相关资源
    最近更新 更多