15 ответов:
кнопки
кнопки просто отключить, как
disabled- это свойство кнопки, которое обрабатывается браузером:<input type="submit" class="btn" value="My Input Submit" disabled/> <input type="button" class="btn" value="My Input Button" disabled/> <button class="btn" disabled>My Button</button>чтобы отключить их с помощью пользовательской функции jQuery, вы просто используете
fn.extend():// Disable function jQuery.fn.extend({ disable: function(state) { return this.each(function() { this.disabled = state; }); } }); // Disabled with: $('input[type="submit"], input[type="button"], button').disable(true); // Enabled with: $('input[type="submit"], input[type="button"], button').disable(false);JSFiddle отключена кнопка и вход демо.
в противном случае вы бы использовали jQuery
prop()метод:$('button').prop('disabled', true); $('button').prop('disabled', false);
Якорь Теги
стоит отметить, что
disabledне действующий собственность для тегов привязки. По этой причине Bootstrap использует следующий стиль на своем.btnэлементы:.btn.disabled, .btn[disabled] { cursor: default; background-image: none; opacity: 0.65; filter: alpha(opacity=65); -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; color: #333; background-color: #E6E6E6; }обратите внимание:
[disabled]свойство является целевым, а также.disabledкласса. Элемент.disabledкласс-это то, что необходимо, чтобы сделать тег привязки отключенным.<a href="http://example.com" class="btn">My Link</a>конечно, это не помешает ссылки от функционирования при нажатии. Приведенная выше ссылка приведет нас к http://example.com. чтобы предотвратить это, мы можем добавить простой фрагмент кода jQuery для целевых тегов привязки с помощью
disabledкласс для вызоваevent.preventDefault():$('body').on('click', 'a.disabled', function(event) { event.preventDefault(); });мы можем переключить
disabledкласс с помощьюtoggleClass():jQuery.fn.extend({ disable: function(state) { return this.each(function() { var $this = $(this); $this.toggleClass('disabled', state); }); } }); // Disabled with: $('a').disable(true); // Enabled with: $('a').disable(false);JSFiddle отключен ссылке демо.
в сочетании
мы затем можно расширить предыдущую функцию отключения, сделанную выше, чтобы проверить тип элемента, который мы пытаемся отключить с помощью
is(). Таким образом, мы можемtoggleClass()если это неinputилиbuttonэлемент, или переключитеdisabledсвойство, если это:// Extended disable function jQuery.fn.extend({ disable: function(state) { return this.each(function() { var $this = $(this); if($this.is('input, button, textarea, select')) this.disabled = state; else $this.toggleClass('disabled', state); }); } }); // Disabled on all: $('input, button, a').disable(true); // Enabled on all: $('input, button, a').disable(false);полная комбинированная демонстрация JSFiddle.
стоит дополнительно отметить, что вышеуказанная функция также будет работать на всех типах ввода.
Я не могу придумать более простой/простой способ! ; -)
использование якорных тегов (ссылок):
<a href="#delete-modal" class="btn btn-danger" id="delete">Delete</a>
чтобы включить тег привязки:
$('#delete').removeClass('disabled'); $('#delete').attr("data-toggle", "modal");
чтобы отключить тег привязки:
$('#delete').addClass('disabled'); $('#delete').removeAttr('data-toggle');
Предположим, у вас есть текстовое поле и кнопку "Отправить",
<input type="text" id="text-field" /> <input type="submit" class="btn" value="Submit"/>отключение:
отключить любую кнопку, например, кнопку "отправить" вам нужно просто добавить отключен атрибут as,
$('input[type="submit"]').attr('disabled','disabled');после выполнения выше строки, ваша кнопка отправки html тег будет выглядеть так:
<input type="submit" class="btn" value="Submit" disabled/>обратите внимание, что атрибут 'disabled' добавлен.
позволяет:
для включения кнопки, например, когда вы есть текст в текстовом поле. Вам нужно будет удалить отключить атрибут для включения кнопки as,
if ($('#text-field').val() != '') { $('input[type="submit"]').removeAttr('disabled'); }теперь приведенный выше код удалит атрибут 'disabled'.
Я знаю, что опаздываю на вечеринку, но специально отвечу на два вопроса:
" я просто хочу отключить определенные клики-вещи, чтобы:
- они остановиться нажав кнопку
- они выглядят инвалидов
как трудно это может быть?"
они остановиться нажав кнопку
1. Для таких кнопок, как
<button>или<input type="button">добавить атрибут:disabled.<button type="submit" disabled>Register</button> <input type="button" value="Register" disabled>2. Для ссылок, любая ссылка... на самом деле, любой HTML элемент, вы можете использовать CSS3 событий указателя.
.selector { pointer-events:none; }поддержка браузера для указателя событий является удивительным по сегодняшнему состоянию искусства (5/12/14). Но мы обычно должны поддерживать устаревшие браузеры в области IE, поэтому IE10 и ниже не поддерживают события указателя:http://caniuse.com/pointer-events. Итак, используя одно из решений JavaScript, упомянутых другими здесь может быть способ пойти для устаревших браузеров.
дополнительная информация о событиях указателя:
- https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events
- http://wiki.csswg.org/spec/css4-ui#pointer-events
они выглядят инвалидов
очевидно это CSS ответ, так что:
1. Для таких кнопок, как
<button>или<input type="button">использовать[attribute]селектор:button[disabled] { ... } input[type=button][disabled] { ... }--
вот базовая демо-версия с материалом, который я упомянул здесь: http://jsfiddle.net/bXm5B/4/
надеюсь, что это помогает.
если, как и я, вы просто хотите отключить кнопку, Не пропустите простой ответ, тонко скрытый в этой длинной нити:
$("#button").prop('disabled', true);
@James Donnelly предоставил исчерпывающий ответ, который основан на расширении jQuery с помощью новой функции. Это отличная идея, поэтому я собираюсь адаптировать его код, чтобы он работал так, как мне нужно.
расширение jQuery
$.fn.disable=-> setState $(@), true $.fn.enable =-> setState $(@), false $.fn.isDisabled =-> $(@).hasClass 'disabled' setState=($el, state) -> $el.each -> $(@).prop('disabled', state) if $(@).is 'button, input' if state then $(@).addClass('disabled') else $(@).removeClass('disabled') $('body').on('click', 'a.disabled', -> false)использование
$('.btn-stateful').disable() $('#my-anchor').enable()код будет обрабатывать один элемент или список элементов.
кнопки и входы поддерживают
disabledсвойство и, если установлено вtrue, они будут выглядеть отключенными (благодаря bootstrap) и не будут срабатывать при нажатии.якоря не поддерживают отключенное свойство, поэтому вместо этого мы будем полагаться на
.disabledкласс, чтобы заставить их выглядеть отключенными (благодаря bootstrap снова) и подключить событие щелчка по умолчанию, которое предотвращает щелчок, возвращая false (нет необходимости вpreventDefaultпосмотреть здесь).Примечание: вам не нужно отцеплять это событие при повторном включении якоря. Просто удаление
.disabledкласс делает трюк.конечно, это не поможет, если вы прикрепили пользовательский обработчик кликов к ссылке, что очень часто встречается при использовании bootstrap и jQuery. Поэтому, чтобы справиться с этим мы собираемся ТРО использовать
isDisabled()расширение для проверки на.disabledкласс, как это:$('#my-anchor').click -> return false if $(@).isDisabled() # do something usefulЯ надеюсь, что помогает упростить вещи немного.
обратите внимание, что есть странная проблема, если вы используете кнопки JS Bootstrap и состояние "загрузка". Я не знаю, почему это происходит, но вот как это исправить.
скажем, у вас есть кнопка и вы установите его для загрузки:
var myButton = $('#myBootstrapButton'); myButton.button('loading');теперь вы хотите вывести его из состояния загрузки, но также отключить его (например, кнопка была кнопкой сохранения, состояние загрузки указывало на текущую проверку и проверку не удалось). Это выглядит как разумный Бутстрап JS:
myButton.button('reset').prop('disabled', true); // DOES NOT WORKк сожалению, это сбросит кнопку, но не отключит ее. Видимо,
button()выполняет некоторые отложенные задачи. Так что вам также придется отложить отключение:myButton.button('reset'); setTimeout(function() { myButton.prop('disabled', true); }, 0);немного раздражает, но это шаблон, который я использую много.
отличный ответ и вклад от всех! Мне пришлось немного расширить эту функцию, чтобы включить отключение выбранных элементов:
jQuery.fn.extend({ disable: function (state) { return this.each(function () { var $this = jQuery(this); if ($this.is('input, button')) this.disabled = state; else if ($this.is('select') && state) $this.attr('disabled', 'disabled'); else if ($this.is('select') && !state) $this.removeAttr('disabled'); else $this.toggleClass('disabled', state); }); }});Кажется, работает для меня. Спасибо всем!
для такого поведения я всегда использую jQueryUI
buttonвиджет, я использую его для ссылок и кнопок.определите тег в HTML:
<button id="sampleButton">Sample Button</button> <a id="linkButton" href="yourHttpReferenceHere">Link Button</a>используйте jQuery для инициализации кнопок:
$("#sampleButton").button(); $("#linkButton").button();использовать
buttonвиджет методы, чтобы отключить / включить их:$("#sampleButton").button("enable"); //enable the button $("#linkButton").button("disable"); //disable the buttonэто позаботится о поведении кнопки и курсора, но если вам нужно углубиться и изменить стиль кнопки при отключении, то перезапишите следующие классы CSS в файле стиля CSS вашей страницы.
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { background-color:aqua; color:black; }но помните: эти классы CSS (если они изменены) также изменят стиль для других виджетов.
Это довольно поздний ответ, однако я наткнулся на этот вопрос при поиске способа отключить кнопки boostrap после их нажатия и, возможно, добавить хороший эффект (например, spinner). Я нашел отличную библиотеку, которая делает именно это:
http://msurguy.github.io/ladda-bootstrap/
вы просто включаете необходимые css и js, добавляете некоторые свойства к своим кнопкам и включаете lada с javascript... Вуаля ! Ваши кнопки имеют новую жизнь (пожалуйста проверьте демо, чтобы увидеть, как это красиво) !
этого выше не работает, потому что иногда
$(this).attr('checked') == undefinedизменить ваш код
if(!$(this).attr('checked') || $(this).attr('checked') == false){
Я знаю, что мой ответ запаздывает, но IMO это самый простой способ переключить кнопку "Включить" и кнопку "Отключить"
function toggleButtonState(button){ //If button is enabled, -> Disable if (button.disabled === false) { button.disabled = true; //If button is disabled, -> Enable } else if (button.disabled === true) { button.disabled = false; } }
Предположим, у вас есть эти кнопки на страницы, такие как :
<input type="submit" class="byBtn" disabled="disabled" value="Change"/> <input type="submit" class="byBtn" disabled="disabled" value="Change"/> <input type="submit" class="byBtn" disabled="disabled" value="Change"/> <input type="submit" class="byBtn" disabled="disabled" value="Change"/> <input type="submit" class="byBtn" disabled="disabled" value="Change"/> <input type="submit"value="Enable All" onclick="change()"/>код js:
function change(){ var toenable = document.querySelectorAll(".byBtn"); for (var k in toenable){ toenable[k].removeAttribute("disabled"); } }
скажем, у вас есть, что выглядит так, что в настоящее время включить.
<button id="btnSave" class="btn btn-info">Save</button>просто добавить это:
$("#btnSave").prop('disabled', true);и вы получите это, которое отключит кнопку
<button id="btnSave" class="btn btn-primary" disabled>Save</button>


Comments