Создать общую функцию нажатия клавиш с идентификатором / классом

пытались ли вы использовать PostMessage для отправки WM_KEYDOWN и WM_KEYUP ?

Изменить

Вы использовали бы его таким образом (пишу на C ++, но вы можете легко использовать PInvoke и ..NET)

HWND hwnd = FindWindow(NULL,_T("Mywindow"));
PostMessage(hwnd,WM_KEYDOWN,VK_A,0);

0
задан Simon Wright 19 March 2019 в 09:20
поделиться

3 ответа

Ваши операции с кликами делятся на несколько категорий. Если вы добавите операцию к элементу, то ваш код может определить, что делать, не зная, что это за фактический элемент, например:

<button type="button" data-operation="click">click</button>
<button type="button" data-operation="navigate" data-navigate="anotherpage">another page</button>

Вы можете затем обработать их в одном function:

$(".targetClass").keydown(function (e) {
    if (e.keyCode === 13) {
       switch ($(this).data("operation")) {
           case "click":
               $(this).trigger("click")
               return false;
           case "navigate":
               navigateTo($(this).data("navigate"));
               return false;

или (предпочтительно) вы можете добавить обработчики для каждой операции:

$(".targetClass[data-operation=click]").keydown(function(e) {
    if (e.keyCode === 13) {
        $(this).trigger("click");
        return false;
    }
});

$(".targetClass[data-operation=navigate]").keydown(function(e) {
    if (e.keyCode === 13) {
        navigateTo($(this).data("navigate"));
        return false;
    }
});

В зависимости от операций и ваших предпочтений, вы можете использовать классы для этих операций. (что может быть более эффективным для селектора, не проверено, возможно, микрооптимизация), например:

<button type="button" class="targetClass trigger-click">click</button>
<button type="button" class="targetClass trigger-navigate" data-navigate="anotherpage">another page</button>

, затем аналогичные обработчики событий разделения:

$(".targetClass.trigger-click").keydown(function(e) {
    if (e.keyCode === 13) {
        $(this).trigger("click");
        return false;
    }
});

$(".targetClass.trigger-navigate").keydown(function(e) {
    if (e.keyCode === 13) {
        navigateTo($(this).data("navigate"));
        return false;
    }
});

Использование отдельных обработчики означают, что расширение новой функциональности с меньшей вероятностью повлияет на существующий код (то есть улучшенную поддержку). Если вы хотите добавить новую операцию:

$(".targetClass.trigger-show").click(function() {
    $($(this).data("trigger")).toggle();
}
0
ответ дан freedomn-m 19 March 2019 в 09:20
поделиться

Вы, вероятно, можете использовать массив атрибутов для их обхода:

var elList = [".classOne","#iDOne",".classTwo",".classThree",".classFour","#idTwo"];

elList.forEach(function(el){
  $(el).keydown(function(e){
    if (e.keyCode === 13) {
      if($(this).hasClass('classOne')){
        //do your staff
        console.log('classOne');
      }
      else if($(this).attr('id') == 'iDOne'){
        //do your staff
        console.log($(this).attr('id'));
      }
      //do it for all
      //
      //
      return false;
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input class="classOne" >classOne
<input id="iDOne">iDOne

0
ответ дан Mamun 19 March 2019 в 09:20
поделиться

Используйте что-нибудь подобное

    function KeyDown(ele, type) {
      var $selector = null;
      if (type == 'cssClass') {
        $selector = $("." + ele);
        else if (type == "id")
          $selector = $("#" + ele);
      }

      $selctor.on("keydown", function(e) {
        if (e.keyCode === 13) {
          switch (ele)
          case "classOne":
            hideShow('classOne');
            return false;
            break;
          case "iDOne":
            navigateTo('somepage');
            break;
          case "classTwo":
            $(".classTwo").trigger("click");
            break;
          case "classThree":
            navigateTo('anotherpage');
            break;
          case "classFour":
            $(".classFour").trigger("click");
            break;
          case "idTwo":
            $("#idTwo").trigger("click");
            break;

            return false;
        }
      })
      
$(function(){
      KeyDown('classOne', 'cssClass');
      KeyDown('iDOne', 'id') ;
      KeyDown('classTwo', 'cssClass');
      KeyDown('classThree', 'cssClass');
      KeyDown('classFour', 'cssClass');
      KeyDown('idTwo', 'id') ;

})

0
ответ дан Sagar 19 March 2019 в 09:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: