【问题标题】:Enter key triggering link输入按键触发链接
【发布时间】:2011-10-20 07:26:52
【问题描述】:

我在页面上有一个 JQuery 滚动条,其中每个项目都是一个带有 id 的 div。每个 div 都有一个指向滚动条中下一个 div 的链接(都在同一页面上)

$('a.panel').click(function () {
};

我对所有带有“面板”类的链接都有一个点击事件,我在其中检查哪些链接被点击,然后相应地进行一些 ajax 处理:

 if($(this).attr('href')=="#item2")
{
//do some processsing 
}

处理完成后,我使用 scrollTo JQuery 方法滚动到下一个 div

我需要让用户按下回车键而不是点击链接。 现在的问题是: 一种。我在同一页面上有几个链接都需要有这种行为。 湾。我需要区分哪个链接触发了点击事件并做一些服务器端处理。

这可能吗?

感谢您快速而有帮助的回复!感谢一百万的帮助!

【问题讨论】:

  • 我很确定焦点 + 回车键会触发 click(),您确定这还没有按预期工作吗?还是我错过了问题的重点?
  • 感谢您的回复,我不确定您的意思?我需要设置焦点吗?效果如何?
  • "I need to have it that the user can press the enter key instead of clicking on the link" 是什么意思?只有一个链接吗?如果是这样,您是否只是在问如何检查是否按下了“输入”?
  • 我希望当用户点击键盘上的回车时,它的工作方式与使用鼠标点击实际链接的效果相同
  • 它是一个滚动条,每张幻灯片都有自己的链接

标签: javascript jquery hyperlink scroll


【解决方案1】:

Focus + enter 触发点击事件,但前提是锚点具有href 属性(至少在某些浏览器中,例如最新的 Firefox)。作品:

$('<a />').attr('href', '#anythingWillDo').on('click', function () {

    alert('Has href so can be triggered via keyboard.');

    // suppress hash update if desired
    return false;

}).text('Works').appendTo('body');

不起作用(浏览器可能认为无需采取任何措施):

$('<a />').on('click', function () {
    alert('No href so can\'t be triggered via keyboard.');
}).text('Doesn\'t work').appendTo('body');

【讨论】:

    【解决方案2】:

    当按下回车键时,您可以trigger() 任何您想要的元素的点击事件。示例:

    $(document).keypress(function(e) {
        if ((e.keyCode || e.which) == 13) {
            // Enter key pressed
            $('a').trigger('click');
        }
    });
    
    $('a').click(function(e) {
        e.preventDefault();
        // Link clicked
    });
    

    演示:http://jsfiddle.net/eHXwz/1/

    您只需要确定触发点击的特定元素,但这取决于您的操作方式/内容。我会说我并不真正推荐这个,但我会给你怀疑的好处。

    在我看来,一个更好的选择是 focus() 应该被点击的链接,并让用户有选择地按下回车键,这无论如何都会触发点击事件。

    我想专注于链接,但不熟悉具体如何执行此操作,您能解释一下吗?

    只需使用$(element).focus()。但是再一次,您必须更加具体,并且有办法确定哪个元素应该获得焦点,以及何时获得焦点。当然,用户可能会采取会导致链接失去焦点的操作,例如单击其他位置。我不知道您的应用程序的作用或行为方式,所以只做您认为最好的事情,但请记住,用户已经期望他们的浏览器有某种行为,并且可能不会意识到他们需要按“回车”,除非您告诉他们。

    如果您确实选择使用“按回车”方法而不是关注链接,您可能还需要 bind()unbind() 按键功能,所以当您不使用时它不会被调用不需要。

    相关:

    【讨论】:

    • 我想关注链接,但不知道具体如何操作,您能解释一下吗? (这可能是一个愚蠢的问题,但我不是 js 专家)
    【解决方案3】:
    $('a.panel').live('keyup', function (evt) {
        var e = evt || event;
        var code = e.keyCode || e.which;
        if (code === 13) {  // 13 is the js key code for Enter
            $(e.target).trigger('click');
        }
    });
    

    这将检测到任何 a.panel 上的按键事件,如果是 enter 键,则会触发获得焦点的面板元素的点击事件。

    【讨论】:

    • 我会试试这个谢谢 :) 事件“现场”代表什么?这会触发我的点击事件并正确处理我的条件吗?换句话说,它是否会像用户点击实际链接一样触发点击事件?我不必先关注链接吗?我在同一页面上有几个链接?
    • .live 是核心 jQuery 插件中的 jQuery 方法,它允许您将事件绑定到对象,即使它们尚未呈现。面板本身需要有焦点,就像您的点击事件一样,是的,它会触发点击事件,就好像用户点击了该特定面板一样。
    【解决方案4】:

    使用e.targetthis 关键字来确定哪个链接触发了事件。

    $('a.panel').click(function (e) {
      //e.target or this will give you the element which triggered this event.
    };
    

    【讨论】:

    • 我已经用过了,我想添加他们可以按键盘上的回车键,然后触发链接
    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多