您如何使div“可粘贴”?


92

我有一些按钮,它们是div元素,因此我想使它们成为可能,以便用户可以按键盘上的Tab键并在它们之间移动。我试过将他们的文本包装在锚标记中,但似乎不起作用。

有没有人有办法解决吗?


您想在按钮之间切换吗?还是div?
Dancrumb 2012年

2
如果锚点具有href属性,则它应该起作用。除非可激活的项目实际执行了某项操作,否则标记的正确使用可能是正确的,也可能不是正确的。
蒂姆·梅多拉


谢谢,href解决方案最有效!蒂姆,如果您提供答案,我会接受。
TheBoss 2012年

Answers:


127

tabindex向您的div元素添加属性。

例:

<div tabindex="1">First</div>
<div tabindex="2">Second</div>

根据Steveax的评论,如果您不希望Tab键顺序偏离页面中元素的位置,请将设置tabindex0

<div tabindex="0">First</div>
<div tabindex="0">Second</div>

1
注意:在HTML <5中,tabindex不是div的有效属性。参考文献{在Neps指出我的错误后纠正}
Dancrumb 2012年

4
@Dancrumb,是的,它们使用的是HTML5
Neps 2012年

45
不过可能更好使用,tabindex=0以免破坏自然的制表顺序。
steveax

7
顺便说一句,尽管如此,不允许使用Enter键单击它。
Ciantic

5
嗯,@ Ciantic知道我们如何在制表到该div时如何解决或模拟Enter的点击吗?hmn
Jomar Sevillejo 2015年

7

对于那些感兴趣的人,除了可以接受的答案之外,您还可以添加以下jquery以在切换到div时更改div样式,还可以处理Enter和Space来触发点击(然后您的点击处理程序将完成其余操作)

$(document).on('focus', '.button',function(){
    $(this).css('border','1px dotted black')
});
$(document).on('keyup', '.button',function(e){
    if(e.which==13 || e.which==32)
        $(this).click()
});

我确定有人已经将其放入jq插件$()。makeTabStop


1
我相信这是最好使用keydown事件,而不是在这里推荐的keyup事件为:developer.mozilla.org/en-US/docs/Web/Accessibility/...。keydown的一个明显优点是,如果从hander函数返回false(在click()调用之后),它将正确停止事件在页面其他位置的传播,而使用keyup则不起作用。
M Katz

空格可能还会滚动页面。您可能还需要使用preventDefault函数。
b_laoshi

3

tabindex="0"属性添加到您希望可选项的每个div中。然后,例如,使用CSS伪类:hover和:focus来向应用程序用户表示div处于焦点和可单击状态。使用JavaScript处理点击。

var doc = document;
var providers = doc.getElementsByClassName("provider");

for (var i = 0; i < providers.length; i++) {
    providers[i].onclick = function() {
      console.log(this.innerHTML);
    };
}
.provider {
    flex: 0 1 auto;
    align-self: auto;
    width: 256px;
    height: 48px;
    margin-top: 12px;
    margin-right: 12px;
    text-align: center;
    line-height: 48px;
    
    text-transform: uppercase;
    background-size: contain;
    background-repeat: no-repeat;
    background-position: 10%;
    background-color: gray;
}

.provider:hover{
  cursor: pointer;
}

.provider:focus{
    -webkit-box-shadow: 0px 2px 8px 2px rgba(0,0,0,0.4);
    -moz-box-shadow: 0px 2px 8px 2px rgba(0,0,0,0.4);
    box-shadow: 0px 2px 8px 2px rgba(0,0,0,0.4);
}
<h4>Click in this area first then press tab</h4>
<div id="email" class="provider" tabindex="0">email</div>
<div id="facebook" class="provider" tabindex="0">facebook</div>
<div id="github" class="provider" tabindex="0">github</div>
<div id="google" class="provider" tabindex="0">google</div>
<div id="twitter" class="provider" tabindex="0">twitter</div>


1

使用jQuery通过按键使元素可点击和可点击

假设条件

  • 所有属于非固定,不可点击类型且应可点击的元素都具有onclick属性(可以将其更改为类或其他属性)
  • 所有元素都是同一类型;我将使用divs。
  • 您正在使用jquery

范例html:

...

<div onclick="clicked(this)">Button 1</div>
<div onclick="clicked(this)">Button 2</div>
<div onclick="clicked(this)">Button 3</div>

...

jQuery代码:这是页面加载后将运行的代码。它需要在您的HTML页面上运行。

$(()=>{
    // make divs with an onclick attribute tabbable/clickable
    $('div[onclick]')
        .attr('tabindex', '0')                     // Add tab indexes
        .keypress((evt)=>{
            var key = evt.key;
            evt.preventDefault();                  // Ensure all default keypress
                                                   // actions are not used
            if (key === ' ' || key === 'Enter') {  // Only send click events for Space
                                                   // or Enter keys
                evt.currentTarget.click();         // Run the click event for element
            }
        });
});

您可以在此处找到一个有效的示例。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.