我该如何禁用jQuery UI对话框上的一个按钮?我在上面的链接中找不到相关的文档信息。
在模态确认框中我有两个按钮(“确认”和“取消”),在特定情况下,我希望禁用“确认”按钮。
我该如何禁用jQuery UI对话框上的一个按钮?我在上面的链接中找不到相关的文档信息。
在模态确认框中我有两个按钮(“确认”和“取消”),在特定情况下,我希望禁用“确认”按钮。
看起来就像是在这个链接的问题中,有人提出了这个解决方案,类似于Nick Craver给出的答案的第一部分:
$("#dialog").dialog({
width: 480,
height: "auto",
buttons: [
{
id: "button-cancel",
text: "Cancel",
click: function() {
$(this).dialog("close");
}
},
{
id: "button-ok",
text: "Ok",
click: function() {
$(this).dialog("close");
}
}
]
});
那么,在其他地方,您应该能够使用jQuery UI按钮的API:
$("#button-ok").button("disable");
{text:"确定",disabled:true,click: function(){}}
。 - Matthieu$("#dialog").dialog("widget").find(".button-ok-class").button("enable")
。 - desm如果你包含了.button()
插件/小部件,你可以使用它来禁用按钮并更新其视觉状态,例如:
$(".ui-dialog-buttonpane button:contains('Confirm')").button("disable");
您可以在此处进行尝试… 如果您使用较旧的版本或不使用按钮小部件,则可以像这样禁用它:
$(".ui-dialog-buttonpane button:contains('Confirm')").attr("disabled", true)
.addClass("ui-state-disabled");
如果你想把它放在特定的对话框中,比如通过ID选择,那么可以这样做:$("#dialogID").next(".ui-dialog-buttonpane button:contains('Confirm')")
.attr("disabled", true);
在其他情况下,如果:contains()
可能会出现误报的情况,那么你可以使用.filter()
,像这样,但在这里使用它有些过头了,因为你已经知道你的两个按钮。如果在其他情况下也是这种情况,代码如下所示:$("#dialogID").next(".ui-dialog-buttonpane button").filter(function() {
return $(this).text() == "Confirm";
}).attr("disabled", true);
这样做将防止:contains()
匹配其他内容的子字符串。
$("#dialogID").nextAll(".ui-dialog-buttonpane").find("button:contains('确认')").attr("disabled", true).addClass("ui-state-disabled");
- Matthieu$(".ui-dialog-buttonpane button:contains('Confirm')").button("disable");
,但如果你想从一个已有的函数中禁用该按钮,则需要将对话框_widgetize_并在此之后禁用该按钮;像这样 $(this).dialog("widget").find(".ui-dialog-buttonpane button:contains('Confirm')").button("disable");
。 - meridiusprop
而不是 attr
。 - Joe Mabel您也可以使用现在已记录的disabled
属性,示例如下:
$("#element").dialog({
buttons: [
{
text: "Confirm",
disabled: true,
id: "my-button-1"
},
{
text: "Cancel",
id: "my-button-2",
click: function(){
$(this).dialog("close");
}
}]
});
要在对话框打开后启用,请使用:
$("#my-button-1").attr('disabled', false);
JsFiddle: http://jsfiddle.net/xvt96e1p/4/
attr: {'data-value':'some value here'}
。 - crushdisabled
属性。 - user1032531$(function() {
$("#dialog").dialog({
height: 'auto', width: 700, modal: true,
buttons: {
'Add to request list': function(evt) {
// get DOM element for button
var buttonDomElement = evt.target;
// Disable the button
$(buttonDomElement).attr('disabled', true);
$('form').submit();
},
'Cancel': function() {
$(this).dialog('close');
}
}
});
}
这段代码禁用了带有“YOUR_BUTTON_LABEL”标签的按钮。您可以在contains()中替换名称。
禁用操作$(".ui-dialog-buttonpane button:contains('YOUR_BUTTON_LABEL')").button("disable");
将“YOUR_BUTTON_LABEL”替换为您按钮的标签。启用
$(".ui-dialog-buttonpane button:contains('YOUR_BUTTON_LABEL')").button("enable");
function getDialogButton( jqUIdialog, button_names )
{
if (typeof button_names == 'string')
button_names = [button_names];
var buttons = jqUIdialog.parent().find('.ui-dialog-buttonpane button');
for (var i = 0; i < buttons.length; i++)
{
var jButton = $( buttons[i] );
for (var j = 0; j < button_names.length; j++)
if ( jButton.text() == button_names[j] )
return jButton;
}
return null;
}
function enableDialogButton( jqUIdialog, button_names, enable )
{
var button = getDialogButton( jqUIdialog, button_names );
if (button == null)
alert('button not found: '+button_names);
else
{
if (enable)
button.removeAttr('disabled').removeClass( 'ui-state-disabled' );
else
button.attr('disabled', 'disabled').addClass( 'ui-state-disabled' );
}
}
您可以覆盖按钮数组并仅保留您需要的按钮。
$( ".selector" ).dialog( "option", "buttons", [{
text: "Close",
click: function() { $(this).dialog("close"); }
}] );
只需将以下内容添加到您的JS文件中:
$.fn.dialogButtons = function(name, state){
var buttons = $(this).next('div').find('button');
if(!name)return buttons;
return buttons.each(function(){
var text = $(this).text();
if(text==name && state=='disabled') {$(this).attr('disabled',true).addClass('ui-state-disabled');return this;}
if(text==name && state=='enabled') {$(this).attr('disabled',false).removeClass('ui-state-disabled');return this;}
if(text==name){return this;}
if(name=='disabled'){$(this).attr('disabled',true).addClass('ui-state-disabled');return buttons;}
if(name=='enabled'){$(this).attr('disabled',false).removeClass('ui-state-disabled');return buttons;}
});};
$('.dialog').dialogButtons('Ok', 'disabled');
启用所有按钮:
$('.dialog').dialogButtons('enabled');
启用“关闭”按钮并更改颜色:
$('.dialog').dialogButtons('Close', 'enabled').css('color','red');
所有按钮上的文本都是红色:
$('.dialog').dialogButtons().css('color','red');
ui-button
进行识别。如果要禁用此按钮:$("#myButton").addClass("ui-state-disabled").attr("disabled", true);
除非您正在动态创建对话框(这是可能的),否则您将知道按钮的位置。因此,要禁用第一个按钮:
$("#myButton:eq(0)").addClass("ui-state-disabled").attr("disabled", true);
ui-state-disabled
类是使按钮具有漂亮的暗淡样式的关键。
var dialog = $('#my-dialog').dialog({
width: '100%',
buttons: [
{ text: 'Submit', click: $.noop, 'data-bind': 'enable: items() && items().length > 0, click: onSubmitClicked' },
{ text: 'Enable Submit', click: $.noop, 'data-bind': 'click: onEnableSubmitClicked' }
]
});
function ViewModel(dialog) {
var self = this;
this.items = ko.observableArray([]);
this.onSubmitClicked = function () {
dialog.dialog('option', 'title', 'On Submit Clicked!');
};
this.onEnableSubmitClicked = function () {
dialog.dialog('option', 'title', 'Submit Button Enabled!');
self.items.push('TEST ITEM');
dialog.text('Submit button is enabled.');
};
}
var vm = new ViewModel(dialog);
ko.applyBindings(vm, dialog.parent()[0]); //Don't forget to bind to the dialog parent, or the buttons won't get bound.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/smoothness/jquery-ui.css" />
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div id="my-dialog">
Submit button is disabled at initialization.
</div>
这个神奇的功能来自于jQuery UI源代码:
$( "<button></button>", props )
你可以通过将其传递到按钮对象中来调用任何jQuery实例函数。
例如,如果你想使用HTML:
{ html: '<span class="fa fa-user"></span>User' }
或者,如果你想给按钮添加一个类(你可以用多种方式实现):
{ addClass: 'my-custom-button-class' }
{ mouseover: function () { $(this).remove(); } }
我真的很惊讶,在无数像这样的帖子中,似乎没有人提到过这个...
.button()
插件的存在,因此它们不一定是最佳/最干净的解决方案了。 - Nick Craver