2013-06-26 2 views
232

Я смущен, когда речь идет отключение <button>, <input> или <a> элемента с классами: .btn или .btn-primary, с JavaScript/JQuery.Лучшего способ кнопки отключения в щебетать Bootstrap

Я использовал следующий фрагмент кода, чтобы сделать это:

$('button').addClass('btn-disabled'); 
$('button').attr('disabled', 'disabled'); 
$('button').prop('disabled', true); 

Так что, если я просто предоставить $('button').addClass('btn-disabled'); мой элемент, он будет выглядеть как отключенные, визуально, но функциональность будет оставаться такими же и его будет кликать без изменений, так что это причина, по которой я добавил параметры attr и prop.

Неужели кто-то из тех же вопросов вышел? Это правильный способ сделать это - при использовании Bootstrap Twitter?

+0

Может проверить hasclass на всех подсоединенных событий, но с HREF я не sure –

+0

@ZachLeighton - когда дело доходит до «a», вы должны предоставить обработчик события для действия click –

+0

Я не думаю, что вы можете отключить ссылку. – sed

ответ

290

Вам просто нужна часть $('button').prop('disabled', true);, кнопка автоматически примет класс защиты.

+25

Не работает для якорей, см. Мой ответ –

+6

Чтобы также остановить стрельбу по клику, добавьте класс с 'указателями-событиями: none', как описано в http://stackoverflow.com/a/19477318/45525 – Synesso

+14

Добавьте этот стиль к вашему css 'a [disabled] {pointer-events: none; } ' –

31

Самый простой способ сделать это, чтобы использовать атрибут disabled, как вы сделали в вашем оригинальный вопрос:

<button class="btn btn-disabled" disabled>Content of Button</button>

В настоящее время, Twitter Bootstrap не есть метод, чтобы отключить функциональность кнопки без использования атрибута disabled.

Тем не менее, это будет отличная возможность для их реализации в их библиотеке javascript.

+0

Это то, что делает снимок OP – Eonasdan

+0

@Eonasdan Правильно, поскольку это был лучший способ достичь желаемого результата. Я просто повторил, что он сделал правильно. – 1234567

+0

(Извините, если вы видите уведомление о нижнем горизонте, я нажал на неправильную вещь) –

-1

Какой атрибут добавляется к кнопке/привязке/ссылке, чтобы отключить его, bootstrap просто добавляет к нему стиль, и пользователь все равно сможет щелкнуть его, пока еще есть событие onclick. Так что мое простое решение, чтобы проверить, если он выключен и удалить/добавить OnClick событие:

if (!('#button').hasAttr('disabled')) 
$('#button').attr('onclick', 'someFunction();'); 
else 
$('#button').removeattr('onclick'); 
+0

Возможно, вы использовали 'removeAttr' вместо' removeattr'. –

+1

Да, .removeAttr() - это имя метода [link] (http://api.jquery.com/removeattr/) – Schone

+1

Это, вероятно, не удалит событие onclick, связанное с вызовами on(). –

107

Для ввода и кнопки:

$('button').prop('disabled', true); 

Для якоря:

$('a').attr('disabled', true); 

Проверено в светлячок , хром.

См http://jsfiddle.net/czL54/2/

+1

Когда вы добавляете обработчик клика на отключенную ссылку привязки, он не должен работать. Но в приведенном примере обработчик кликов также запускается. http://jsfiddle.net/76wmpohs/ – ahgindia

+1

Кажется, этого достаточно для Bootstrap 3. Кажется, что bootstrap делает что-то, устанавливая btn, чтобы быть визуально отключенным, что также предотвращает запуск события click. В чистом jQuery и HTML без Bootstrap 3, например, некоторые примеры скриптов, это, по-видимому, более сложная история. Но этот вопрос был в контексте Bootstrap. – Greg

81

Строительство от jeroenk's answer, вот краткое изложение:

$('button').addClass('disabled'); // Disables visually 
$('button').prop('disabled', true); // Disables visually + functionally 

$('input[type=button]').addClass('disabled'); // Disables visually 
$('input[type=button]').prop('disabled', true); // Disables visually + functionally 

$('a').addClass('disabled'); // Disables visually 
$('a').prop('disabled', true); // Does nothing 
$('a').attr('disabled', 'disabled'); // Disables visually 

См fiddle

+0

приятный приемлемый пример! $ ('# button-2'). Attr ('disabled', 'disabled') Работал как для кнопок, так и для ссылок. – msanjay

+4

@msanjay: Нет - скрипка использует Bootstrap 2 и * визуально * отключает ссылки/привязки, но не * функционально * отключает их, как говорится в комментарии. Если вы измените его на BS3, он также функционально отключит их. – EML

+0

EML делает важный момент. Это в Boot Strap 3, установка атрибута disabled является достаточной, и Bootrap 3 будет обрабатывать остальное для вас. Но в jQuery и HTML (без Bootstrap 3) этого недостаточно. – Greg

27
<div class="bs-example"> 
     <button class="btn btn-success btn-lg" type="button">Active</button> 
     <button class="btn btn-success disabled" type="button">Disabled</button> 
</div> 
+4

Реальное решение. Нет необходимости в JQuery. –

+0

Это действительно правильное решение для кнопок загрузки. – user65439

+1

не работает для хрома –