Выпадающий с формой внутри с помощью twitter-bootstrap - PullRequest
46 голосов
/ 13 ноября 2011

У меня есть раскрывающийся список в моем TopBar, созданный с помощью фреймворка Twitter Bootstrap.

У меня есть 3 проблемы, с которыми я не могу найти решения:

  1. Поля ввода текста и пароля слишком большие, как их настроить?Было бы также неплохо увеличить выпадающий список.
  2. Ярлыки для полей слишком темные, как их немного осветлить?
  3. Раскрывающийся список закрывается, когда я нажимаю на один изполя.Я должен открыть его снова, и затем я могу печатать, пока не нажму в следующем поле.Значения сохраняются даже тогда, когда раскрывающийся список закрыт.Как сделать так, чтобы он оставался открытым?

Вот скриншот проблем 1 и 2:

Screenshot of my problems 1 and 2

Также здесь приведен HTML-код для TopBarкак сейчас.

<div class='topbar-wrapper'>
  <div class='topbar'>
    <div class='topbar-inner'>
      <div class='container'>
        <h3>
          <a href="/">Webworld</a>
        </h3>
        <ul class='nav'>
          <li>FILLER...</li>
        </ul>
        <ul class='nav secondary-nav'>
          <li class='dropdown' data-dropdown='dropdown'>
            <a href="#" class="dropdown-toggle">Login</a>
            <div class='dropdown-menu' id='signin-dropdown'>
              <form accept-charset="UTF-8" action="/sessions" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="4L/A2ZMYkhTD3IiNDMTuB/fhPRvyCNGEsaZocUUpw40=" /></div>
                <fieldset class='textbox'>
                  <label id='js-username'>
                    <span>Username</span>
                    <input autocomplete="on" id="username" name="username" type="text" />
                  </label>
                  <label id='password'>
                    <span>Passwort</span>
                    <input id="userpassword" name="userpassword" type="password" />
                  </label>
                </fieldset>
                <fieldset class='subchk'>
                  <input name="commit" type="submit" value="Log In" />
                </fieldset>
              </form>
            </div>
          </li>
        </ul>
      </div>
    </div>
  </div>
</div>

Там рельсы и автоматически генерируют скрытый ввод.

Я уже пытался скопировать реализацию формы входа в систему, которую использует твиттер, но когда япробовал это, TopBar составляет около 250px в высоту, и содержимое раскрывающегося списка открыто, а не закрыто.

У меня пока нет пользовательских CSS или JavaScript, за исключением верхнего отступа 40px в теле какпредложено в документации по начальной загрузке.

Может ли кто-нибудь помочь мне с этим?

Ответы [ 8 ]

76 голосов
/ 18 ноября 2011

Попробуйте добавить код ниже где-нибудь в вашем javascript. Это должно остановить это.

  $('.dropdown-menu').find('form').click(function (e) {
    e.stopPropagation();
  });
8 голосов
/ 04 мая 2012

(Twitter Bootstrap 2.x)

Возможно, вы захотите переместить содержимое style="" в ваши таблицы стилей ...

Если пользователь ввел неправильный пароль:

добавьте класс open в li class="dropdown open"

и класс error в fieldset class="control-group error"

<ul class="nav pull-right">
  <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Login <b class="caret"></b></a>
    <div class="dropdown-menu">
      <form action="" id="form_login" style="margin: 0; padding: 3px 15px" accept-charset="utf-8" method="post">
        <fieldset class="control-group">
          <label for="form_email" class="control-label">Email address</label>
          <div class="controls">
            <div class="input-prepend" style="white-space: nowrap">
              <span class="add-on"><i class="icon-envelope"></i></span>
              <input type="email" name="email" id="form_email" autocomplete="on" class="span2">
            </div>
          </div>
        </fieldset>
        <fieldset class="control-group">
          <label for="form_password" class="control-label">Password</label>
          <div class="controls">
            <div class="input-prepend" style="white-space: nowrap">
              <span class="add-on"><i class="icon-lock"></i></span>
              <input type="password" name="password" id="form_password" class="span2">
            </div>
          </div>
        </fieldset>
        <label class="checkbox">
          <input type="checkbox" name="remember" value="true"> Remember me
        </label>
        <p class="navbar-text">
          <button type="submit" class="btn btn-primary">Login</button>
        </p>
      </form>
    </div>
  </li>
</ul>

Вам не нужен дополнительный CSS или JavaScript, чтобы сделать этот вид красивым (с TB2.x)

7 голосов
/ 13 апреля 2012

Если вы не хотите останавливать распространение ваших событий или если это решение не работает для вас, вы можете добавить этот код где-то рядом с инициализацией bootstrap-dropdown:

$('html').off('click.dropdown.data-api');
$('html').on('click.dropdown.data-api', function(e) {
  if(!$(e.target).parents().is('.dropdown-menu form')) {
    $('.dropdown').removeClass('open');
  }
});
6 голосов
/ 03 марта 2012

Третий вопрос. В строке исходного кода комментария bootstrap-dropdown.js

$('html').on('click.dropdown.data-api', clearMenus)

и напишите здесь:

$(document).bind('click', function(e) {
    var $clicked = $(e.target);
    if (!$clicked.hasClass("dropdown-menu") &&
            !$clicked.parents().hasClass("dropdown-menu")){
        clearMenus();
    }
});
5 голосов
/ 17 ноября 2011

https://github.com/twitter/bootstrap/blob/master/bootstrap.css#L1559

max-width установлен в 220px, удалите атрибут, и он растянется сам.

2 голосов
/ 30 ноября 2011

Похоже, проблема на основе CSS, с которой вы столкнулись.

Я исправил ее следующими стилями:

#signin-dropdown {
    padding-left: 5px;
    padding-right: 5px;
    padding-top: 1em;
}
#signin-dropdown form {
    margin:0px;
}
#signin-dropdown form .textbox {
    margin-bottom:0em;
    padding-top:0em;
}

#signin-dropdown form .subchk {
    margin-bottom: 5px;
    padding-top: 8px;
}

#username, #password, #userpassword {
    color: #404040;
    float: left;
    font-size: 13px;
    line-height: 18px;
    padding-top: 0px;
    text-align: left !important;
    width: 140px;
}
1 голос
/ 13 ноября 2011

О ваших вопросах 1 и 2.

  1. Вы пытались установить длину входа? Вы можете сделать это, установив атрибут «size» входного тега. Вы можете узнать больше здесь

  2. Вы пытались изменить стиль лейбла? Например:

<span style="color:#FFFFFF">Username </span>
0 голосов
/ 25 мая 2017

вы просто добавляете свой контент в <form></form> тег

вот так:

 <div class="dropdown  dropdown-scroll" id="selectedClient">
    <button class="btn btn-block btn-lg btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown">
        انتخاب <span class="caret"></span>
	</button>
    <div class="dropdown-menu " role="menu" aria-labelledby="dropdownMenu1">
        <button type="button" class="close">&times;</button>
        <form>
            <ul>
                <li role="presentation">
                    <input id="searchSubClientInput" type="text" class="form-control" placeholder="جستجو بر اساس نام خانوادگی" ng-model="query">
                </li>
            </ul>
        </form>
		<ul class="select-list scrollable-menu">
			<li class="dropdown-header">خودم</li>
		</ul>
	</div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...