【问题标题】:rails/css/jquery - highlight text behind element when element above it(with opacity:0.001) is selectedrails/css/jquery - 当元素上方的元素(不透明度:0.001)被选中时,突出显示元素后面的文本
【发布时间】:2013-08-08 10:56:15
【问题描述】:

我在页面上有密码字段,其中显示的密码被屏蔽,但我希望用户以明文形式复制密码并能够将其粘贴到另一个网站的某个位置。

我关注了这篇文章Mask text, but still allow users to copy it 并创建了另一个不透明度为 0.001 的 input[type=text] 字段,并对该字段进行了调整,使其与密码字段重叠

现在当用户试图从密码字段复制密码时,他们实际上是从另一个不透明度非常低的输入字段值复制。

但现在我想让用户在选择密码时体验良好,因为目前在复制时用户不知道该值是否被复制,因为他们从另一个输入字段复制,与另一个重叠。

所以我正在寻找任何可以突出显示实际字段后面的文本(密码星号)的 css/jquery 技巧(不透明度为 0.001)。这样用户至少会知道他们的价值观实际上被复制了。

谢谢, 院长

【问题讨论】:

  • 提供一个 jsfiddle 复制您的问题
  • 这里是相同的 jsfiddle:jsfiddle.net/Fbnhd 这里你会看到密码的默认值是“abcdef”,所以当你尝试通过使用鼠标和 ctrl+c 选择从密码字段复制时,你会得到实际值(abcdef)..但是用户体验不好

标签: javascript jquery html ruby-on-rails-3 css


【解决方案1】:

您确定您或您的用户需要此功能,或者这只是一种便利功能吗?我见过的没有密码字段允许复制。除非有广告,否则使用此功能的人数将接近于零。也许带有ZeroClipboard 的“复制密码”链接是更好的解决方案?

无论如何,这是我能想到的最好的。它使用jQuery-textrange plugin 来处理跨浏览器的文本选择。它也需要rather recent versionsjsfiddle demo.

主要思想是让低不透明度字段忽略鼠标事件,因此用户可以正常选择密码字段中的文本。优点是我们根本不需要处理选择渲染。这可以通过 CSS 来实现:

#account-password-hide { pointer-events: none; }

接下来,一旦用户完成选择,我们将获得选择位置并在低不透明度字段中选择相同的部分。不幸的是,这将清除密码字段中的选择。

$("#account_password").select(function () {
    console.log("moving selection to hidden field");
    var pos = $("#account_password").textrange();
    $('#account-password-hide').textrange('set', pos.start, pos.end);
    $('#account-password-hide').css("pointer-events", "auto");
});

CTRL+C 现在可以工作了,右键单击 → 复制也可以,因为我们设置了pointer-events: auto。如果仍然是none,则右键单击将进入实际密码字段,从而阻止复制操作。

最后我们需要重置pointer-events,以便下次点击再次进入正确的字段:

function reset() {
    $('#account-password-hide').css("pointer-events", "none");
}
$('#account-password-hide').mousedown(function (evt) {
    // allow right clicks
    if (evt.which !== 3) {
        reset();
    }
});
$('#account-password-hide').mouseup(function () {
    reset();
});
$('#account-password-hide').blur(function () {
    reset();
});

据我所知,这基本上是可行的。

为了使选择保持焦点更改,您必须创建一个附加元素,该元素包含与密码字段相同的字符(即与密码字段中的星号/点外观相同)。然后您可以使用CSS system colors 突出显示选定的字符。不过,为每个人正确获取z-indexopacity 需要进行一些测试。

【讨论】:

  • 感谢这个很棒的答案,这正是我想要的。我理解并尝试了上面的代码sn-p ..它工作得非常好。除了你最后提到的问题之外,选择时没有保留焦点,为此你已经给出了一些实施建议。所以根据你的解决方案我将不得不创建另一个文件,其中包含与我的密码字段类似的(****)字符作为值,并且具有一些 css 属性,我必须显示选定的测试,并且需要在用户时将此元素重叠在原始 passwd 字段上已完成选择文本。我对此是否正确?
  • 也根据您给出的链接,甚至我在 IE 浏览器中尝试了 pointer-events 属性,但它在此浏览器中不起作用,我正在尝试为这个问题找到一些替代方案..如果你已经有在 IE 中为您工作的解决方案那么这对我来说将是一个奖励..无论如何感谢这个..我真的很喜欢 jquery 插件,可能在将来我也应该用这种方法解决问题
  • 是的,我猜(还没有尝试过)你需要在隐藏字段下方放置一个div,一旦select-事件运行并在@987654337 上再次隐藏它,就在密码字段上方@。至于指针事件:可以简单地使用z-index: -1 而不是指针事件 none(并在pointer-events: auto 时重置它)。如果z-index 不起作用,您也可以看看这个问题:stackoverflow.com/questions/5855135/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 2013-06-03
  • 2010-12-20
  • 2014-09-19
  • 2011-02-03
  • 2011-11-13
相关资源
最近更新 更多