2013-02-10 4 views
31

Я пытаюсь использовать модальное окно всплывающего окна. Я установил фоном на «ничего». Когда модальная функция открыта (без фона), поля ввода на «исходной» странице не могут быть сфокусированы.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> 

Простой Javascript, чтобы сделать всплывающее окно перемещаемой:

$('#myModal').draggable(); 

Все это на JSFiddle ...

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

+0

Так рад, что нашел этот вопрос. Это тяжелый поисковик «Сделать модальным не модальным» :) –

+4

Вы должны отметить ответ Эрика, как принято. –

+0

Это реальная проблема при использовании select2 или подобных компонентов в модальном окне. Select2 создает вход, который не является потомком для модального, поэтому ответ Эрика Фриза решает эту проблему. Надеюсь, этот комментарий поможет кому-то! –

ответ

47

Это звучит как модальный не является правильным решением вашей проблемы здесь.

Модальный диалог по определению не должен позволять пользователю взаимодействовать с чем-либо под ним.

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

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

Это, как говорится, есть способ обойти это. Bootstrap sets up an event listener, чтобы украсть фокус со всего остального, и это то, что мешает вам редактировать ввод текста. Другие кнопки работают, потому что они не требуют фокуса, только событие click.

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

$('#myModal').on('shown', function() { 
    $(document).off('focusin.modal'); 
}); 

И просто для удовольствия: http://jsfiddle.net/Jxdd8/4/

+0

Спасибо, что отлично работает! Я согласен, что это противоречит определению модального, во всяком случае, мне нужно диалоговое окно над страницей, мода Bootstrap отлично подходит для этого! Похоже, что модальный воровский фокус не работает на всех элементах ввода! – user966737

+0

Работает отлично !!! Настолько рад, что нашел это! Хотелось бы, чтобы мы могли проголосовать за ответ, который будет принят :) –

+0

спасибо за этот ясный ответ, теперь я знаю, для чего это модально. Где я могу продвигать больше, чем одни? – abimelex

0

, как Эрик Фриз сказал: «модальный диалог по определению не должен позволять пользователю взаимодействовать с чем-нибудь под ним.» я предполагаю, что вы ищете, можно найти в поповер, который имеет возможность разрешить HTML содержание http://twitter.github.com/bootstrap/javascript.html#popovers

+0

Поппоры имеют совсем другое чувство (в бутстрапе в любом случае). Модальная модальность - это именно то, что мне нужно, и я рад, что нашел этот вопрос. –

2

* ПОСТАНОВИЛИ

В кого события все еще застряли в этом вопросе решение заключается в следующем:

После того, как класс div <div class="modal fade" insert: style="display:none;" Это предотвратит блокировку полей модами и устраняет проблему.

+0

работает как charm.thanks много –

36

, пожалуйста, помните, что Эрик Фриз ответ уже не действует, если вы используете Twitter Bootstrap 3 - название события изменилось, так что используйте следующий код вместо:

$('#myModal').on('shown.bs.modal', function() { 
    $(document).off('focusin.modal'); 
}); 
+1

Я использую динамически сгенерированные модальности. Любой способ полностью отключить его? $ (document) .on ('показано.bs.modal', function() { $ (document) .off ('focusin.modal'); }); Пробовал это, не работал :-( – Tom

+0

Спасибо за сообщение. Это лучшее решение ... Я пробовал все, чтобы обойти это, но в конце концов это самый безболезненный путь. вопрос, хотя ... почему $ (document) ... работает, но $ (это) ... не так? Не то, чтобы это действительно имело значение. Мне просто интересно. – BillRuhl

1

следующим образом можно решить эту проблему для Bootstrap v2.3.2, Kendo UI Сетка версии 2013.3.1119.340 в IE11.

Точка удаления класса "in" из класса модального класса. Не нужно использовать «style =» display: none; », так как это приведет к тому, что пользовательский интерфейс Kendo Grid странно.

HTML кода, прежде чем исправлена:

<div class="modal hide fade in" id="YourWindow" role="dialog"> 

HTML кода после того, как исправлена:

<div class="modal hide fade" id="YourWindow" role="dialog"> 
     <div class="modal-header"> 
      <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>    
     </div> 
     <div class="modal-body" > 
      <div id="YourWindowBody"> 
      </div> 
     </div> 
     <div class="modal-footer"> 
      <button type="button" data-dismiss="modal">Close</button>  
     </div> 
    </div> 

то же самое время, добавьте следующую строку JavaScript:

$("#YourWindow").on('shown', function() { 
     $(document).off('focusin.modal'); 
    }); 
-1

Использования Bootstrap версии 3.3.2 и ни одно из вышеперечисленных решений не работало.

Добавление следующий CSS сделал трюк

.modal-backdrop { 
    position: static; 
} 
-1

использовать этот код конец всего кода JavaScript:

$(document).on('focusin', function(e) { 
    if ($(event.target).closest(".mce-window").length) { 
     e.stopImmediatePropagation(); 
    } 
}); 

jsfiddle

+0

, но это для tinymce в bootstrap modal. –

1

Пожалуйста, удалите:

tabindex="-1" 

из

<div id="myModal" class="modal hide" data-backdrop="" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 

Используйте это один вместо:

<div id="myModal" class="modal hide" data-backdrop="" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 
+1

Пожалуйста, включите объяснение о том, почему вы думаете, что это решит проблему OP - это может быть не очевидно для всех. –

0

Для меня проблема заключалась в том, что я использую JQuery 3.2.1, так что я изменить его на 2.1.3, который был использовать на предыдущем приложении мы развивались, и все работало нормально. Может быть что-то с версиями совместимости jquery и bootstrap.

Надеюсь, это поможет

Смежные вопросы