如何在禁用按钮时替换事件处理程序

时间:2014-10-15 19:24:24

标签: javascript jquery html asp.net onclick

我遇到的情况是我必须将My UI中的所有未经授权的控件从隐藏状态替换为禁用状态。添加带有未授权文本的工具提示。单击控件以查看未经授权的文本。

我能够更新代码但在某个时刻被阻止,我必须停止在控件上触发事件。 同时,我必须在点击该事件时显示警报。我怎么能这样做?

My trails are here in fiddle

问题: 我有[clickdisabled = disable]点击功能,如果禁用控件则需要调用该功能。 但同时在控制上我有onclick =" SearchDetails();叫做抛出错误。

<input id="btnSearch" type="button" name="btnSearch" value="Search" onclick="SearchDetails();return false;" title="search" clickDisabled=disable />

//Add title to all disabled items in project
$('[clickdisabled=disable]').attr("title", "You are not authorized to perform this action.");

//  Show unauthorized error on click of disabled control
$('[clickdisabled = disable]').click(function () {
    alert($(this).attr("title"));
});

3 个答案:

答案 0 :(得分:1)

如果您期望功能不可用的情况,您可以在调用它们之前检查它们是否存在:

<input id="btnSearch" type="button" name="btnSearch" value="Search" 
onclick="if (typeof(SearchDetails) === typeof(Function)) SearchDetails();"
 title="search" clickDisabled=disable />

Fiddle

答案 1 :(得分:1)

您需要做的是跟踪正常的onclick事件处理程序和禁用的onclick事件处理程序。禁用按钮后,删除正常的onclick事件处理程序并添加禁用的onclick事件处理程序。重新启用该按钮时,请删除已禁用的onclick事件处理程序,然后添加正常的事件处理程序。您可以使用jQuery .on().off()事件执行此操作(请参阅下面的示例)。

&#13;
&#13;
function onNormalClick(e){
    alert('This is the default test button functionality.');
}
function onDisabledClick(e){
        alert('This button is disabled.');
        e.preventDefault();
        e.stopPropagation();    
}
function disableButtons(selector){
    $(selector).css('color', '#888');
    $(selector).off('click', onNormalClick);
    $(selector).on('click', onDisabledClick);
}
function enableButtons(selector){
    $(selector).css('color', '#000');
    $(selector).off('click', onDisabledClick);
    $(selector).on('click', onNormalClick);
}
               
$(document).ready(function(){
    $('.test').on('click', onNormalClick);
    $('#disabler').click(function(){
        disableButtons('.test');
    });
    $('#enabler').click(function(){
        enableButtons('.test');
    });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class='test'>Test</button>
<hr/>
<button id=disabler>Disable</button>
<button id=enabler>Enable</button>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以阻止默认处理,如下所示:

var button = $('#your_button_id');
button.click(function(e){
    e.preventDefault();
    alert("Your alert message for the user");
});