Twitter Bootstrap模式阻止文本输入字段

use*_*737 38 modal-dialog twitter-bootstrap

我试图使用模态作为弹出帮助窗口.我将背景设置为"无".打开模态(无背景)时,"原始"页面中的输入字段无法聚焦.

其他输入类型(示例中的复选框和按钮)效果很好......

任何的想法 ?

我的代码:

<div class="container">
<!-- Button to trigger modal -->
  <form>
      <label>Input</label>
      <input type="text" placeholder="Type something…">
      <label class="checkbox">
        <input type="checkbox">Checkbox
      </label>
      <button type="submit" class="btn">Submit</button>
  </form>

  <!-- Button to trigger modal -->
  <a href="#myModal" role="button" class="btn" data-toggle="modal">Open Help...</a>

  <!-- Modal -->
  <div id="myModal" class="modal hide" data-backdrop="" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-header">
      <h3 id="myModalLabel">Modal header</h3>
    </div>
    <div class="modal-body">
      <p>One fine body…</p>
    </div>
    <div class="modal-footer">
      <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

简单的Javascript使弹出窗口可拖动:

$('#myModal').draggable();
Run Code Online (Sandbox Code Playgroud)

这一切都在JSFiddle上......

http://jsfiddle.net/Jxdd8/3/

Eri*_*ese 51

听起来像模态不是解决问题的正确方法.

根据定义,模态对话框不应允许用户与其下面的任何内容进行交互.

在用户界面设计中,模态窗口是一个子窗口,它要求用户在返回操作父应用程序之前与其进行交互,从而阻止应用程序主窗口上的工作流.

- http://en.wikipedia.org/wiki/Modal_window

话虽这么说,有办法解决它.Bootstrap 设置一个事件监听器来窃取其他所有内容的焦点,这就是阻止你编辑文本输入的原因.其他按钮可以工作,因为它们不需要焦点,只需要点击事件.

您可以侦听引导模式触发的"显示"事件,并禁用它设置的焦点侦听器.

$('#myModal').on('shown', function() {
    $(document).off('focusin.modal');
});
Run Code Online (Sandbox Code Playgroud)

只是为了好玩:http://jsfiddle.net/Jxdd8/4/


小智 44

请记住,如果您使用的是Twitter Bootstrap 3,事件名称已更改,则Eric Freese的答案将不再有效,因此请使用以下代码:

$('#myModal').on('shown.bs.modal', function() {
    $(document).off('focusin.modal');
});
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用动态生成的模态。有什么办法可以完全关闭它?$(document).on('shown.bs.modal', function() { $(document).off('focusin.modal'); }); 试过了,没用:-( (2认同)

小智 9

请删除:

tabindex="-1"
Run Code Online (Sandbox Code Playgroud)

<div id="myModal" class="modal hide" data-backdrop="" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
Run Code Online (Sandbox Code Playgroud)

改为使用这个:

<div id="myModal" class="modal hide" data-backdrop="" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
Run Code Online (Sandbox Code Playgroud)

  • 请说明您认为它可以解决OP问题的原因 - 对于每个人来说可能并不明显. (2认同)
  • @Balázs 同意。这个解决方案对我有用,但我必须查找原因。本质上,通过说“tabindex =“-1””,模式将所有背景“输入”设置为“不会接收焦点”。https://www.wufoo.com/html5/tabindex-attribute/ (2认同)

小智 5

请删除:

tabindex="-1"
Run Code Online (Sandbox Code Playgroud)

并将模态的第一行更改为

tabindex=""
Run Code Online (Sandbox Code Playgroud)

这将使焦点集中到输入字段。