簡體   English   中英

僅在表單元素外部觸發jquery鍵事件

[英]trigger jquery key event only outside form element

是否可以僅在表單元素外部觸發鍵事件?

背景:我有一個代碼,可以在按下右鍵時加載下一頁。 但是,如果有人在表單元素中使用該鍵,我不想觸發該事件。

當前代碼:

$(document).keydown(function(e){
    if (e.keyCode == 37) { 

        var url = $('a#left').attr("href");

        if (url != '') { // require a URL
                window.location = url; // redirect
        }

    return false;
    }

    if (e.keyCode == 39) { 

        var url = $('a#right').attr("href");

        if (url != '') { // require a URL
                window.location = url; // redirect
        }

    return false;
    }
});

這是該概念的基本示例。 您只需將事件處理程序添加到文檔中,並檢查其目標對象是否沒有作為表單的父級。

HTML

<form>
    Inside form
    <input/>
</form>
Outside form
<input />

使用Javascript

    $(document).keyup(function(event){
        if($(event.target).parents("form").length == 0){
           alert("here");
        }
    });

工作POC: http : //jsfiddle.net/48NYE/

此概念可以輕松應用於您提供的腳本。

修改腳本

$(document).keydown(function(e){
    var outsideForm = $(e.target).parents("form").length == 0;
    if (e.keyCode == 37 && outsideForm) { 

        var url = $('a#left').attr("href");

        if (url != '') { // require a URL
                window.location = url; // redirect
        }

    return false;
    }

    if (e.keyCode == 39  && outsideForm){ 

        var url = $('a#right').attr("href");

        if (url != '') { // require a URL
                window.location = url; // redirect
        }

    return false;
    }
});

如果您在表單之外還有其他字段,我希望這可能會很有用

現場演示

document.onkeyup = function( ev ){

  var key = ev.which || ev.keyCode ,
      aID = { 37:"left", 39:"right" }; 

  if( ! (/INPUT|TEXTAREA/i.test(ev.target)) && aID[key]) {
     var url = document.getElementById( aID[key] ).getAttribute('href');
     window.location = url;
  }

};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM