【问题标题】:detect key press on modal dialog not working检测模态对话框上的按键不起作用
【发布时间】:2015-12-18 08:07:41
【问题描述】:

我想在显示模式时检测用户是否按下了任何键。我尝试了以下代码,但未触发事件。

代码sn-p:

   $("#modal_confirmation_dp_change").on('keydown keyup input', function ( e ) {
         alert();
        });

如果我尝试测试点击事件,它会被触发。

   $("#modal_confirmation_dp_change").on('click', function ( e ) {
            alert();
        });

我正在使用 twitter 引导模式。我错过了什么吗?

回答: 我找到了解决我的问题的方法。看来我不应该指向模态的 id 以便检测到按键事件。

【问题讨论】:

  • 模态是如何创建的?你有没有在事件中设置断点来查看它是否被触发?
  • 我正在使用 twitter 引导模式。我尝试在该函数中放置一个断点,但它没有被触发。另一方面,点击事件被触发。
  • 可以放你的html代码吗?

标签: javascript jquery html modal-dialog


【解决方案1】:

我找到了解决问题的方法。看来我不应该指向模态的 id 以便检测到按键事件。

$(document).on('keydown keyup input click',  function (e) {
if($('#modal_confirmation_dp_change').is(':visible')) {
            var key = e.which;
                if (key == 13) { //This is an ENTER 
                    $('#changed_dp_ok').click();
                }
        }
    });

【讨论】:

    【解决方案2】:

    您不应该像这样使用多个事件,因为它会根据您的事件计数触发 3 次,一次用于 keydownkeyup,另一次用于 input。这仍然不是问题,问题是您正在触发的click。那是 jQuery 事件对象的事件,而您需要在 DOM 上触发 click

    你应该触发 DOM 的原生 .click() 事件:

    $("#modal_confirmation_dp_change").on('keydown', function ( e ) {
        var key = e.which || e.keyCode;
        if (key == 13) {
            $('#changed_dp_ok')[0].click(); // <----use the DOM click this way!!!
        }
    });
    

    $(document).on('keydown', function(e) {
      if (e.which == 13) {
        //$('.btn').click();  // <----this wont work
        $('.btn')[0].click(); // <---but this works
      }
    })
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
    
    <div class="container">
      <h2>Modal Example</h2>
      <!-- Trigger the modal with a button -->
      <button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">Open Modal</button>
    
      <!-- Modal -->
      <div class="modal fade" id="myModal" role="dialog">
        <div class="modal-dialog">
    
          <!-- Modal content-->
          <div class="modal-content">
            <div class="modal-header">
              <button type="button" class="close" data-dismiss="modal">&times;</button>
              <h4 class="modal-title">Modal Header</h4>
            </div>
            <div class="modal-body">
              <p>Some text in the modal.</p>
            </div>
            <div class="modal-footer">
              <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            </div>
          </div>
    
        </div>
      </div>
    
    </div>

    【讨论】:

    • 检查添加的sn-p。
    【解决方案3】:

    我发现将重点放在模态上是一个更好的解决方案。

    为此,您必须向模态容器添加tabindex 参数,然后使用JavaScript 设置其焦点。完成后,它可以接收键盘事件:https://stackoverflow.com/a/6633271/2873507

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多