Kann mir jemand sagen, wie ich eine Variable für Schaltflächentext im jQuery-UI-Dialogfeld verwenden kann? Ich möchte einen dynamischen Schaltflächennamen erstellen.
Dies funktioniert nicht, da jQuery den Namen der Schaltfläche verarbeitet (mit oder ohne Anführungszeichen).
Das wird funktionieren:
var button_name = 'Test';
var dialog_buttons = {};
dialog_buttons[button_name] = function(){ closeInstanceForm(Function); }
dialog_buttons['Cancel'] = function(){ $(this).dialog('close'); }
$('#instanceDialog').dialog({ buttons: dialog_buttons });
Sie können der Schaltfläche im Dialogfeld eine ID zuweisen und diese dann mit Hilfe von Standard jQuery bearbeiten.
$("#dialog_box").dialog({
autoOpen: false,
modal: true,
resizable: false,
buttons: [{
text: "Ok",
"id": "btnOk",
click: function () {
//okCallback();
},
}, {
text: "Cancel",
click: function () {
//cancelCallback();
},
}],
close: function () {
//do something
}
});
Schaltflächentext einstellen:
var newLabel = "Updated Label";
$("#btnOk").html('<span class="ui-button-text">'+ newLabel +'</span>')
Das Problem hierbei ist, dass das Dialog-Plugin seinen Schaltflächen keine ID zuweist. Daher ist es ziemlich schwierig, diese direkt zu ändern.
Initialisieren Sie den Dialog stattdessen wie gewohnt, suchen Sie die Schaltfläche anhand des darin enthaltenen Textes und fügen Sie eine ID hinzu. Auf die Schaltfläche kann dann direkt zugegriffen werden, um den Text zu ändern, zu formatieren, ihn zu aktivieren/deaktivieren usw.
$("#dialog_box").dialog({
buttons: {
'ButtonA': function() {
//... configure the button's function
}
});
$('.ui-dialog-buttonpane button:contains(ButtonA)').attr("id","dialog_box_send-button");
$('#dialog_box_send-button').html('Send')
Vielleicht fehlt mir der Punkt - aber wäre der Setter nicht der einfachste Weg?
$("#dialog_box").dialog({
buttons: {
[
text:"OK",
click: function() {
//... configure the button's function
}
]
});
$("#dialog_box").dialog("option", "buttons", { "Close": function() { $(this).dialog("close"); } });
$(function() {
// using textbox value instead of variable
$("#dialog").dialog({
width: 400,
buttons: [
{ text: $("#buttonText0").val(), click: function() { $(this).dialog("close"); } },
{ text: $("#buttonText1").val(), click: function() { $(this).dialog("close"); } }
]
});
$("#updateButtonText").on("click", function() {
var $buttons = $("#dialog").dialog("widget").find(".ui-dialog-buttonpane button");
console.log($buttons.get());
$buttons.eq(0).button("option", "label", $("#buttonText0").val());
$buttons.eq(1).button("option", "label", $("#buttonText1").val());
// few more things that you can do with button widget
$buttons.eq(0).button("option", "icons", { primary: "ui-icon-check" });
$buttons.eq(1).button("disable");
$("#dialog").dialog("open");
});
});
@import url("https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.min.css");
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
<div id="dialog" title="Sample Dialog">
<p>Proceed?</p>
</div>
<p style="text-align: center;">
<input type="text" id="buttonText0" value="OK">
<input type="text" id="buttonText1" value="Cancel">
<input type="button" id="updateButtonText" value="Update Button Text">
</p>
Dies kann in folgenden Schritten erfolgen:
Das folgende Beispiel erläutert die obigen Schritte.
var btnArray = [ { text: "Add Entry", click: function(){ this.retVal = true; addRowIntoTemplateManifest(); $(this).dialog('close'); } }, { text: "Cancel", click: function(){ this.retVal = false; $(this).dialog('close'); } } ];
Es wird eine benutzerdefinierte Funktion displayConfirmDialog_Dynamic () geschrieben, die den Header des Dialogs, den Dialogtext und die Schaltfläche Array enthält. Der Aufruf dieser Funktion lautet wie folgt:
displayConfirmDialog_Dynamic("Add Template Manifest Entry?", "Do you want to add following Cuboid Entry to Template Manifest?\nCuboidNane: '" + json.cuboidName + "' CuboidId: " + json.cuboidId + "\non Server:"
+ json.serverUrl , btnArray );
Die Funktion displayConfirmDialog_Dynamic lautet wie folgt:
//Confirmation dialog Dynamic Buttons
function displayConfirmDialog_Dynamic(dlgTitle, message, btnArray)
{
var retVal;
$("div#dialog-confirm").find("p").html(message);
var confirmDlg = $( "#dialog-confirm" ).dialog({
resizable: false,
height: "auto",
width: 400,
modal: true,
title: dlgTitle,
buttons: btnArray,
show:{effect:'scale', duration: 700},
hide:{effect:'explode', duration: 700}
});
confirmDlg.dialog('option', 'buttons', btnArray);
confirmDlg.prev(".ui-dialog-titlebar").css({"background":"#ffc000", "color":"#ffffff", "font-size":"13px", "font-weight":"normal"}) ;
confirmDlg.dialog("open");
}
Die Confirm Dialog Template wird wie folgt als DIV-Tag definiert. Beachten Sie, dass title
und der Inhalt des <p>
-Tags dynamisch durch JavaScript-Code geändert werden.
<div id="dialog-confirm" title="Empty the recycle bin?" style="display:none;">
<p>These items will be permanently deleted and cannot be recovered. Are you sure?</p>
</div>
Der Screenshot des Dialogfelds, das mit dem obigen Code angezeigt wird, ist unten dargestellt:
Und vergiss es nicht
$($("button", $(".info_dialog").parent())[1]).html("<span class='ui-button-text'>Button text here.</span>");
Das wird funktionieren $($("button", $("#dialogId").parent())[NUMBER_OF_YOUR_BUTTON]).text("My Text");
var buttonName = "something";
$('#button-id').attr('value', buttonName);
warum nicht ein One-Liner ...
$("span.ui-button-text:contains('OLD BUTTON NAME')").html('NEW BUTTON NAME');
weisen Sie der Schaltfläche eine Klasse zu. Der Schaltflächentext befindet sich in einem Bereich mit einer Klasse mit dem Namen ui-button-text
in Ihrer definierten Klasse ..__ Wenn Sie also Ihrer Schaltfläche die Klasse .contacts-dialog-search-button
geben, lautet der Code zum Zugriff auf den Text
$('.ui-button-text','.contacts-dialog-search-button').text();
hier ist der Code, den ich für meine aktuellen Projektschaltflächen verwende, um Ihnen ein Beispiel zu geben.
buttons : [
{
text : 'Advanced Search',
click : function(){
if($(this).dialog("option", "width")==290){
$('#contacts-dialog-search').show();
$(this).dialog("option", "width", 580);
$('.ui-button-text','.contacts-dialog-search-button').text('Close Search');
}
else{
$('#contacts-dialog-search').hide();
$(this).dialog("option", "width", 290);
$('.ui-button-text','.contacts-dialog-search-button').text('Advanced Search');
}
},
"class" : "contacts-dialog-search-button"
}
]
Ja bei Inline-Verhalten durchaus möglich:
function ConfirmDialog() {
var yesButtonName = "Yes";
var noButtonName = "No";
this.showMessage = function(message, callback, argument) {
var $dialog = $('<div></div>')
.html(message)
.dialog({
modal: true,
closeOnEscape: true,
buttons: [
{
text:yesButtonName,
click: function() {
if (callback && typeof(callback) === "function") {
if (argument == 'undefined') {
callback();
} else {
callback(argument);
}
} else {
$(this).dialog("close");
}
}
},
{
text:noButtonName,
click: function() {
$(this).dialog("close");
}
}
]
});
$dialog.dialog("open");
};
this.setYesButtonName = function(name) {
yesButtonName = name;
return this;
};
this.setNoButtonName = function(name) {
noButtonName = name;
return this;
};
}
Objekt der ConfirmDialog-Klasse erstellen.
this.CONFIRM_DIALOG = new ConfirmDialog();
Rufen Sie die Methode bei jedem Ereignis auf, sagen wir onclick ().
OK_DIALOG.setYesButtonName('Wana Marry').showMessage('Worst Idea!!');
Job erledigt!!