Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于处理Tab键按下的JavaScript_Javascript - Fatal编程技术网

用于处理Tab键按下的JavaScript

用于处理Tab键按下的JavaScript,javascript,Javascript,正如我们所知,当我们点击键盘上的TAB键时,它允许我们浏览打开的网页上的所有活动href链接。是否可以通过JavaScript读取这些URL 例如: function checkTabPress(key_val) { if (event.keyCode == 9) { // Here read the active selected link. } } 具有以下html: <!-- note that not all browsers focus on l

正如我们所知,当我们点击键盘上的TAB键时,它允许我们浏览打开的网页上的所有活动href链接。是否可以通过JavaScript读取这些URL

例如:

function checkTabPress(key_val) {
    if (event.keyCode == 9) {
        // Here read the active selected link.
    }
}
具有以下html:

<!-- note that not all browsers focus on links when Tab is pressed -->
<a href="http://example.com">Link</a>

<input type="text" placeholder="Some input" />
<a href="http://example.com">Another Link</a>

<textarea>...</textarea>

...
您可以通过以下方式访问活动链接:

// event listener for keyup
function checkTabPress(e) {
    "use strict";
    // pick passed event or global event object if passed one is empty
    e = e || event;
    var activeElement;
    if (e.keyCode == 9) {
        // Here read the active selected link.
        activeElement = document.activeElement;
        // If HTML element is an anchor <a>
        if (activeElement.tagName.toLowerCase() == 'a')
            // get it's hyperlink
            alert(activeElement.href);
    }
}

var body = document.querySelector('body');
body.addEventListener('keyup', checkTabPress);
//密钥更新的事件侦听器
功能检查tabpress(e){
“严格使用”;
//如果传递的对象为空,则拾取传递的事件或全局事件对象
e=e | |事件;
活性元素;
如果(e.keyCode==9){
//在这里阅读活动的选定链接。
activeElement=document.activeElement;

//如果HTML元素是锚点。

给定这段HTML代码:

<a href='https://facebook.com/'>Facebook</a>
<a href='https://google.ca/'>Google</a>
<input type='text' placeholder='an input box'>
我已经为
keyUp
事件绑定了一个元素,该事件触发一个函数来检查Tab键是否被按下(或者从技术上说是被释放)

该函数检查和是否为
a
。如果是,则进入
If
块,在我的例子中,将
href
属性的值写入JavaScript控制台


这里有一个

您应该能够使用keyup事件来执行此操作。具体来说,
事件。target
应该指向所选元素,并且
事件。target.href
将为您提供该元素的href值。有关更多信息,请参阅

下面的代码是jQuery,但除了样板代码外,其余代码在纯javascript中是相同的

$('a').on( 'keyup', function( e ) {
    if( e.which == 9 ) {
        console.log( e.target.href );
    }
} );

jsidle:

您需要使用正则表达式 网站网址是

变量URL模式= /(http | ftp | https):/[\w-]+([\w-]+)+([\w,@?^=%和:/~++-]*[\w@?^=%&/~+-])/

如示例所示使用此表达式

var regex=new RegExp(urlPattern);var t='www.google.com';
var res=t.match(regex/g)


因为您必须将网页作为字符串传递给变量t中的此javascript,并获取数组,而不是
9
,因此只能使用
KeyCodes
TAB

指定的容器或元素中使用TAB&TAB+SHIFT

我们将首先处理TAB&TAB+SHIFT键侦听器

        $(document).ready(function() {
            lastIndex = 0;
            $(document).keydown(function(e) {
                if (e.keyCode == 9) var thisTab = $(":focus").attr("tabindex");
                if (e.keyCode == 9) {
                    if (e.shiftKey) {
                        //Focus previous input
                        if (thisTab == startIndex) {
                            $("." + tabLimitInID).find('[tabindex=' + lastIndex + ']').focus();
                            return false;
                        }
                    } else {
                        if (thisTab == lastIndex) {
                            $("." + tabLimitInID).find('[tabindex=' + startIndex + ']').focus();
                            return false;
                        }
                    }
                }
            });
            var setTabindexLimit = function(x, fancyID) {
                console.log(x);
                startIndex = 1;
                lastIndex = x;
                tabLimitInID = fancyID;
                $("." + tabLimitInID).find('[tabindex=' + startIndex + ']').focus();
            }
            /*Taking last tabindex=10 */
            setTabindexLimit(10, "limitTablJolly");
        });
HTML中定义tabindex

        <div class="limitTablJolly">
            <a tabindex=1>link</a>    
             <a tabindex=2>link</a>    
             <a tabindex=3>link</a>    
             <a tabindex=4>link</a>    
             <a tabindex=5>link</a>    
             <a tabindex=6>link</a>    
             <a tabindex=7>link</a>    
             <a tabindex=8>link</a>    
             <a tabindex=9>link</a>    
             <a tabindex=10>link</a>   
        </div>

链接
链接
链接
链接
链接
链接
链接
链接
链接
链接
试试这个

 <body>
   <div class="linkCollection">
             <a tabindex=1 href="www.demo1.com">link</a>    
             <a tabindex=2 href="www.demo2.com">link</a>    
             <a tabindex=3 href="www.demo3.com">link</a>    
             <a tabindex=4 href="www.demo4.com">link</a>    
             <a tabindex=5 href="www.demo5.com">link</a>    
             <a tabindex=6 href="www.demo6.com">link</a>    
             <a tabindex=7 href="www.demo7.com">link</a>    
             <a tabindex=8 href="www.demo8.com">link</a>    
             <a tabindex=9 href="www.demo9.com">link</a>    
             <a tabindex=10 href="www.demo10.com">link</a>   
        </div>

</body>

<script>
$(document).ready(function(){
  $(".linkCollection a").focus(function(){
    var href=$(this).attr('href');
    console.log(href);
    // href variable holds the active selected link.
  });
});
</script>

$(文档).ready(函数(){
$(“.linkCollection a”).focus(函数(){
var href=$(this.attr('href');
console.log(href);
//href变量保存活动的选定链接。
});
});
不要忘记添加jQuery库

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>



查看
文档.activeElement
以获取当前关注的元素(如果有,或
正文
)。您可以检查
.nodeName.toUpperCase()==“a”
,然后阅读其
。href
属性看看这个问题(没有测试)。@Ian您的意思是
.toLowerCase()
?@rink.attendant.6废话,我当然知道。哈哈,谢谢,我甚至没有意识到这一点。无论采用何种方法,我都明确表示要匹配case-obviouslyJavascript示例来处理TAB和TAB+SHIFT,并在指定元素中循环@rink.attendant.6。我非常确定它是这样。试着按TAB几次。SHIFT-TAB也可以工作。拿我来说我没有,但不是在每个浏览器中都有。让我提出一个跨浏览器代码。无论它在哪个浏览器中工作,该浏览器的JavaScript引擎都有严重问题…我不认为Chrome有任何严重问题=)我猜你的浏览器将在Chrome、Safari、IE 10兼容模式下工作,以及IE的旧版本。这将指向s按tab键时选择的元素,而不是已聚焦的新元素。按我所知(以及IE8中的测试),keydown将在键执行任何操作之前触发(然后您可以取消它执行的任何操作)keyup将指向新元素,因为keyup是在该键执行任何操作后触发的。我不知道,如果先前关注的元素不是
a
+1,那么您可以绑定到
a
元素,并且仍然可以触发它,尽管使用了jQuery.IE 9、Firefox和Chrome,所有变量都可以定义你为什么要把回调函数包装成另一个无用的回调函数?因为我在传递一个参数。这个参数是一个事件,它无论如何都会被传递。“它无论如何都会被传递”也许这就是您的解决方案不兼容跨浏览器的原因,请参阅我对您的答案的评论。这还不足以回答问题。使用大于0的tabindex会中断选项卡顺序,因此不建议使用。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>