Ответ 1
Попробуйте добавить код ниже где-нибудь в вашем javascript. Это должно прекратить это.
$('.dropdown-menu').find('form').click(function (e) {
e.stopPropagation();
});
У меня есть раскрывающийся список в моем TopBar, построенный с помощью CSS Bootstrap CSS.
У меня есть 3 проблемы, с которыми я не могу найти решение:
Вот скриншот проблем 1 и 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="✓" /><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 имеет размер 250 пикселей в высоту, а содержимое раскрывающегося списка открыто, а не закрывается.
У меня нет пользовательских CSS или JavaScript до сих пор, кроме верхнего заполнения 40px в теле, как это было предложено документами для загрузки.
Может кто-нибудь мне помочь?
Попробуйте добавить код ниже где-нибудь в вашем javascript. Это должно прекратить это.
$('.dropdown-menu').find('form').click(function (e) {
e.stopPropagation();
});
(Twitter Bootstrap 2.x)
Вы можете переместить содержимое style=""
в таблицы стилей...
Если пользователь вводит неверный пароль:
добавить класс open
в li class="dropdown open"
и class 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)
Если вы не хотите прекращать распространение своих событий или это решение не сработало для вас, вы можете добавить этот код где-нибудь около инициализации начальной загрузки:
$('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');
}
});
Для вашего третьего вопроса - В исходной строке комментария для начальной загрузки 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();
}
});
https://github.com/twitter/bootstrap/blob/master/bootstrap.css#L1559
max-width устанавливается на 220px, удаляет атрибут и растягивается.
Его выглядит как проблема с u на основе 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 и 2.
Вы пытались установить длину ввода? Вы можете сделать это, установив атрибут "размер" входного тега. Вы можете читать дальше здесь
Вы пытались изменить стиль ярлыка? Например:
<span style="color:#FFFFFF">Username </span>
вы просто добавляете свой контент в тег <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">×</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>