У меня есть этот код:
// jquery
$(':button').live('click', eventHandler);
<!--html-->
<button type="button" name="lvldown" disabled="disabled">Level down</button>
Я ожидал, что событие щелчка не будет вызвано после щелчка, если кнопка отключена из-за этого <button> disabled
описания в w3schools:
Определение и использование
Атрибут disabled указывает, что кнопка должна быть отключена.
Отключенная кнопка не работает и не может быть нажата.
Однако мой eventHandler
все еще вызывается после щелчка. Это почему? Мне действительно нужно сделать что-то вроде $(':button:not([disabled])').live('click', eventHandler);
?
РЕДАКТИРОВАТЬ: проблема на самом деле возникает только под моим Chrome 16.0.912.77. Под Firefox и IE мой код работает просто отлично. Btw. Я использую jquery 1.7.1. Вот несколько скриншотов:
кнопка , консоль после загрузки , консоль после нажатия кнопки
Мой код теперь в основном выглядит следующим образом:
jQuery(document).ready(function() {
$(':button').live('click', eventHandler);
constraintActions();
});
function constraintActions() {
// level down
$('.shopCat').not('.shopCat[data-parent]').each(function() {
var lvlDownButton = $(this).children('p').children('[name=lvldown]');
if ($(this).children('.shopCat').size() > 0 ||
$(this).next('.shopCat').size() == 0) {
lvlDownButton.addClass('disabled');
lvlDownButton.attr('disabled', 'disabled'); // also tried: lvlDownButton.prop("disabled", true);
} else {
lvlDownButton.removeClass('disabled');
lvlDownButton.removeAttr('disabled'); //also tried: lvlDownButton.prop("disabled", false);
}
});
function eventHandler() {
console.log($(this));
}
EDIT2: На самом деле кнопка HTML выглядит следующим образом:
<button type="button" class="submit btn-generic" name="lvldown" disabled="disabled">
<span class="lvldown">Podřadit</span>
</button>
Я пытался сохранить только сущность, но, похоже, я упустил что-то важное, и эта важная вещь - это промежуток внутри, потому что следующее работает (!), Как и ожидалось:
<button type="button" class="submit btn-generic" name="lvldown" disabled="disabled">
Podřadit
</button>
Если я попытаюсь добавить внутренний интервал в примеры, которые вы предоставили в комментариях, я получу следующие результаты (в chrome 16.0.912.77):
Javascript (от j08691):
$('button').live('click', function(){alert('FIRE!')});
HTML (по j08691):
<button type="button" disabled="disabled">Level down</button> <!-- does not fire -->
<button type="button" disabled="disabled"><span>Level down</span></button> <!-- does fire!-->
Javascript (от Pointy, jquery установлен на версию 1.5.2):
$<button disabled>Hi</button>('button').live('click', function() {
alert("click");
});
HTML (от Pointy):
<button disabled>Hi</button> <!-- does not fire -->
<button disabled><span>Hi</span></button> <!-- does not fire -->
<!-- after changing jquery version to 1.7.1 -->
<button disabled><span>Hi</span></button> <!-- does fire! -->
Под firefox он не срабатывает, несмотря ни на что, только под (моим) хромом он ведет себя так. Что-то не так с тем, что я делаю?
P.S. извините что мой пост стал таким длинным