2013-07-02 4 views
0

Как это сделать?Добавление функции jquery click к отключенной кнопке?

У меня отключена кнопка jquery ui, на которой я хочу отобразить предупреждение. Кнопка становится доступной при изменении выпадающего меню на странице.

HTML:

<button id="AssignRolesButton" disabled="disabled">Assign Roles</button> 

JS:

$(function() {  
    $('#AssignRolesButton').button(); 

    //doesnt work 
    $('#AssignRolesButton').button().click(function (e) { e.preventDefault(); alert('yoyo'); }); 

    $('#ApplicationsDropdownList').change(function() { 
     //enables the button 
     $('#AssignRolesButton').removeAttr('disabled').removeClass('ui-state-disabled'); 
     //doesnt work 
     $('#AssignRolesButton').button().click(function (e) { e.preventDefault(); alert('yoyo'); }); 
     // also doesnt work 
     $('#AssignRolesButton').click(function (e) { e.preventDefault(); alert('yoyo'); }); 
    });  
}); 

Итак, подведем итог, мне нужно кнопку, чтобы иметь Jquery щ стиль в то время как инвалиды и зарегистрировать функцию щелчка, когда его включен.

+0

Вы хотите, чтобы отключенный элемент активировал событие клика или нет? –

+1

@roasted: отключенные элементы не могут запускать события кликов ... – Bergi

+1

@ Bergi ya, вот почему я спрашивал и отправлял как ответ обходное решение –

ответ

1
//enables the button 
$('#AssignRolesButton').removeAttr('disabled').removeClass('ui-state-disabled'); 

No. Вам нужно будет использовать enable method of your Button-widget (Demo). В противном случае кнопка jQuery-UI по-прежнему отключена (даже если она не выглядит так), и jQueryUI перехватывает событие click, останавливая его распространение, чтобы ваши обработчики не вызывались. Вы можете видеть это поведение явно here - обработчики, прикрепленные до перехватчика jQueryUI, все еще вызываются.

e.preventDefault; 

Как и другие упоминали, это метод и должен называться: e.preventDefault();.

+0

спасибо, никогда не знал, что метод enable существует. – woggles

+0

проблема с этим решением заключается в том, что каждый раз, когда вы выбираете что-то новое в выпадающем списке, добавляется еще один обработчик evernt. Я обошел это, используя: '$ ('# AssignRolesButton'). One (" click ", function() { alert ('sdsds'); });' – woggles

+0

Это не часть моего решения, которое было в ваш оригинальный код, и я только что продемонстрировал его сейчас :-) Действительно, вы должны присоединить обработчик кликов за пределами обработчика 'change'. Или вы ожидаете только один клик на событие смены? – Bergi

0

Затем просто привяжите событие click, когда вы выбрали что-то в раскрывающемся меню. В противном случае оставьте его без касания.

1

Используйте обходной путь в качестве элементов для инвалидов не срабатывают вложенное событие:

DEMO

$(function() { 
    var $assignBtn = $('#AssignRolesButton'); 
    $('<div id="btn_overlay"/>').css({ 
     position: 'absolute', 
     top: $assignBtn.offset().top, 
     left: $assignBtn.offset().left, 
     width: $assignBtn.outerWidth(), 
     height: $assignBtn.outerHeight(), 
     'z-index': 1000, 
    }).click(function() { 
     $assignBtn.triggerHandler('click'); 
    }).appendTo('body'); 

    $('#ApplicationsDropdownList').change(function() { 
     $('#btn_overlay').remove(); 
     $assignBtn.prop('disabled', false); 
     //... 
    }); 
    $assignBtn.click(function (e) { 
     e.preventDefault(); 
     alert('yoyo from btn handler'); 
    }); 
}); 
+0

Довольно многое, о чем я думал. Любая причина, по которой вы выбрали '.triggerHandler', а не' .trigger'? –

+0

@MarkSchultheiss просто, чтобы избежать распространения даже здесь ничего не изменилось –

+0

FYI, исправить e.preventDefault call - needs '()' –

Смежные вопросы