Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向禁用的按钮添加jquery单击功能?_Jquery_Jquery Ui - Fatal编程技术网

向禁用的按钮添加jquery单击功能?

向禁用的按钮添加jquery单击功能?,jquery,jquery-ui,Jquery,Jquery Ui,我该怎么做 我有一个禁用的jquery ui按钮,我想显示一个警报。 更改页面上的下拉列表时,该按钮将启用 HTML: 总之,我需要在禁用jquery ui样式时使用该按钮,并在其启用时注册单击功能。然后在下拉列表中选择某个内容时,只需绑定单击事件即可。否则,将其保持不接触状态。使用变通方法,因为禁用的元素不会触发附加事件: $(函数(){ var$assignBtn=$(“#AssignRolesButton”); $('').css({ 位置:'绝对', 顶部:$assignBtn.off

我该怎么做

我有一个禁用的jquery ui按钮,我想显示一个警报。 更改页面上的下拉列表时,该按钮将启用

HTML:


总之,我需要在禁用jquery ui样式时使用该按钮,并在其启用时注册单击功能。

然后在下拉列表中选择某个内容时,只需绑定单击事件即可。否则,将其保持不接触状态。

使用变通方法,因为禁用的元素不会触发附加事件:

$(函数(){
var$assignBtn=$(“#AssignRolesButton”);
$('').css({
位置:'绝对',
顶部:$assignBtn.offset().top,
左:$assignBtn.offset().left,
宽度:$assignBtn.outerWidth(),
高度:$assignBtn.outerHeight(),
“z指数”:1000,
})。单击(函数(){
$assignBtn.triggerHandler('click');
}).附于(“主体”);
$('#ApplicationsDropdownList')。更改(函数(){
$('btn_overlay')。删除();
$assignBtn.prop('disabled',false);
//...
});
$assignBtn.单击(函数(e){
e、 预防默认值();
警报(“来自btn处理程序的yoyo”);
});
});
不需要。您需要使用()。否则,jQueryUI按钮仍然被禁用(即使看起来不是这样),jQueryUI会截获click事件,停止其传播,从而不会调用处理程序。您可以清楚地看到这种行为——在jQueryUI的拦截器之前附加的处理程序仍然被调用


正如其他人提到的,这是一个方法,需要调用:
e.preventDefault()

是否希望禁用元素触发单击事件?@broading:disabled元素无法触发单击事件…@Bergi ya,这就是为什么我询问并发布一个解决方法(缺少
})
e.preventDefault应该是
e.preventDefault()-这些是粘贴错误吗?@mark yeh抱歉,这些是在浏览器中粘贴和编辑的错误-现在将编辑问题以修复我的想法。如果您选择了
.triggerHandler
而不是
.trigger
?@markschultheis只是为了避免传播,即使在这里也无法更改任何内容仅供参考,请修复e.preventDefault调用-需要
()
单击演示中的JSHint按钮:)查找其他问题。-IE版本中的额外逗号错误:(@MarkSchultheiss这不是一个真正的错误,只是JSHint不喜欢camel case;)但是,等等,我会解决这个解决方案的问题,每次你在下拉列表中选择新的东西时,都会添加另一个evernt处理程序。我通过使用:
$('AssignRolesButton').one(“单击”,函数(){alert('sdsds');})这不是我的解决方案的一部分,它在您的原始代码中,我刚刚演示了它现在可以工作:-)实际上,您应该在
change
处理程序之外附加click处理程序。或者,您希望每个更改事件仅单击一次吗?不,我最终将处理程序附加到更改处理程序的外部。谢谢你的帮助,它现在起作用了
<button id="AssignRolesButton" disabled="disabled">Assign Roles</button>
$(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'); });  
   });    
});
$(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');
    });
});
//enables the button 
$('#AssignRolesButton').removeAttr('disabled').removeClass('ui-state-disabled');
e.preventDefault;