不确定您想要自动单击“是”的目标是什么,但这里是修改它的代码,因此您有更多选项来显示或不显示确认对话框。
let myCounter = 0;
let showDialog = function () {
console.log('showDialog:' + myCounter);
if (myCounter > 0) {
myCounter++; // Counter incremented due to defaulting to yes click
console.log('myCounter != 0: ' + myCounter);
return false;
} else {
displayDialog();
}
}
function displayDialog () {
console.log('displayDialog: ' + myCounter);
Ext.Msg.confirm('Confirm', 'Do you like Ext JS?', function (button) {
if (button === 'yes') {
myCounter++; // If yes, increment counter
} else {
myCounter--; // Decrement counter if answer no
console.log('no answer: ' + myCounter);
}
});
}
let btn = Ext.create({
xtype: 'button',
text: 'Show Dialog',
renderTo: Ext.getBody(),
width: 200,
height: 50,
handler: showDialog
});
// Ext.Viewport.add(btn);
btn.show();
只显示确认,然后试图从那里隐藏它无法验证您的代码是否有效。这就是为什么在小提琴中我在视图中添加了一个按钮来演示代码如何工作以显示对话框并阻止它显示。
使用您显示的代码,该函数是对话框上按钮单击的处理程序,它永远不会阻止它显示。显示对话框,代码等待用户单击,然后在您定义的处理函数内运行代码。
这是另一个小提琴,可以更好地展示实现您所要求的另一种方法。
myCounter = 0;
function showDialog () {
if (myCounter != 0) {
console.log('Do NOT show the dialog');
} else {
Ext.Msg.show({
title: 'Confirm',
msg: '<p>Do you like Ext JS?',
icon: Ext.Msg.QUESTION,
buttons: Ext.Msg.YESNO,
fn: function (ans) {
if (ans === 'yes') {
myCounter++;
}
}
})
}
}
let btn = Ext.create({
xtype: 'button',
text: 'Show Dialog',
renderTo: Ext.getBody(),
width: 200,
height: 50,
handler: showDialog
});
// Ext.Viewport.add(btn);
btn.show();
showDialog();
上面使用了一个自定义消息框,将其设置为默认确认。显示确认,用户回答是或否。添加了一个按钮,因此您可以在选择“否”时重新打开确认对话框。一旦用户回答“是”,对话框将不再显示。
我知道没有直接的方法可以“自动单击”“是”按钮,因为在单击按钮之前,任何按钮上的处理程序函数都不会触发。这两个是我建议处理它的方式,所以它可以像你期望的那样工作。