Javascript 便笺

Posted

技术标签:

【中文标题】Javascript 便笺【英文标题】:Javascript Sticky Notes 【发布时间】:2012-05-01 00:56:47 【问题描述】:

为了好玩,我用 javascript 做了一些便签。

当屏幕上有多个便笺时,我希望将选中的那个放在前面。 IE。将 z-index 提高到高于其他便笺。 目前我正在使用 :hover 使用 CSS 执行此操作,这有点烦人。我想用 javascript/jquery 来做。我试着用 focus() 和 blur() 来做 addClass/removeClass

这是我目前所拥有的

$('.darkYellow').click(function() 
    $(this).focus(function() 
        $(this).addClass("index");
    );
);

$('.darkYellow').blur(function() 
    $(this).removeClass("index");
); 

已更新,感谢 Christoph http://jsfiddle.net/EnigmaMaster/aQMhk/6/

【问题讨论】:

jsFiddle 似乎与这个问题无关。 @Quentin:jsFiddle 显然是提问者试图用 javascript 替换的 CSS 方法 我在代码中添加了 Javascript 并更新了链接 【参考方案1】:

类选择器以. 字符开头,类名不是(嗯,它们可以,但那样是疯狂的)。

$(this).addClass("index")

【讨论】:

(括号中的短语为投票提供了额外的动力;-) @EnigmaMaster: a) 类真的被添加到元素中了吗? (通过诸如 firebug 之类的 DOM 检查器工具检查)b)您为 .index 分配了哪些 CSS? 没有这个类似乎没有被添加,我有 z-index: 5;分配给 css【参考方案2】:

对于 addClass 不需要包含 '.'

简单

$(this).addClass("index");

http://api.jquery.com/addClass/

【讨论】:

【参考方案3】:

虽然目前我不知道为什么.on() 不起作用(这应该是首选方法!),下面的代码应该可以工作:

$('.darkYellow').live("click", function() 
        $(".index").removeClass("index");
        $(this).addClass("index");
);

这就是你所需要的。

    点击时的实时事件处理程序(应首选使用 on()) 查找索引注释并删除类 为当前“点击”元素添加类

DEMO

【讨论】:

【参考方案4】:

在便笺实际存在之前,您正在调用 $('.darkYellow').click().click() 将在调用时为每个匹配选择器的元素添加一个事件。你想要的是像.live() 这样的东西,它将处理所有元素,现在和未来,例如

$('.darkYellow').live('click', function() 
    $(this).focus(function() 
        $(this).addClass("index");
    );
);

更新

试试:

$('.darkYellow').live('click', function() 
  $(this).addClass("index");
);

$('.darkYellow').live('blur', function() 
  $(this).removeClass("index");
);

正如其他人指出的那样,对 .focus() 的调用应该是不必要的。

【讨论】:

如果可能,我想避免使用 .live(),因为“从 jQuery 1.7 开始,不推荐使用 .live() 方法。” -来自api.jquery.com/live @EnigmaMaster:文档中的下一句为“使用 .on() 附加事件处理程序”。我必须承认,我对.on() 并不熟悉,但它看起来——至少在这个简单的例子中——就像是.live() 的直接替代品。试一试,让我们知道您的进展情况。【参考方案5】:

这是我最近编写的一个toggleFocus() 函数,它旨在为焦点/模糊事件的父节点添加一个.is-focused 类。

CodePen Demo

function toggleFocus(e) 
    setTimeout(() => 
         e.addEventListener('focus', (path) => 
              path[2].classList.add("is-focused");
         , true);

         e.addEventListener('blur', (path) => 
              path[2].classList.remove("is-focused");
         , true);
    , 0);


const items = document.getElementById('items');
const itemsArray = items.querySelectorAll(".item");

[].forEach.call(itemsArray, (item) => 
    toggleFocus(item)
);

【讨论】:

以上是关于Javascript 便笺的主要内容,如果未能解决你的问题,请参考以下文章

Mac 便笺使用

Windbg Scratch Pad(便笺簿)窗口的使用

移至... > iCloud > 便笺选项已禁用

win10便笺(onenote)更换操作

win7便笺无法打开

csharp 便笺