首先,我是Javascript / Jquery的新手,所以这可能是一个愚蠢的问题......
我正在使用JQuery UI集合中的对话框。我有一个按钮,当点击它时,它会显示一个确认框或一个警告框。我的代码如下......
function checkfn() {
if (document.getElementById('<%=HomeInstSelected.ClientID%>').value == 'False') {
var dialogResult = false;
$("#dialog-confirm").dialog({
resizable: false,
height: 140,
modal: true,
buttons: {
Continue: function () {
dialogResult = true;
$(this).dialog("close");
},
Cancel: function () {
$(this).dialog("close").slideUp();
}
}
});
// alert just debug code!
alert(dialogResult);
return dialogResult;
}
else {
$("#dialog-HomeInstitutionPrompt").dialog({
height: 140,
modal: true
});
}
}
我的问题在于确认部分,似乎确认框没有等待我点击继续或取消 - 它只是直接进入警报部分并返回dialogResult = false。
在我运行$('#dialog-confirm')命令之前,是否可以暂停执行?
或者,是否可以在Continue函数中为checkfn()函数返回true?这样,我根本不需要dialogResult var吗?
答案 0 :(得分:4)
之前我没有在jQuery UI中使用.dialog,但是,通常使用jQuery,函数是异步运行的。这意味着你需要将你想要的代码放在Continue函数中。
一种可能性是发送成功/取消功能以检查您是否可以通过“继续”和“取消”功能进行调用。
function checkfn(success, cancel) {
if (document.getElementById('<%=HomeInstSelected.ClientID%>').value == 'False') {
var dialogResult = false;
$("#dialog-confirm").dialog({
resizable: false,
height: 140,
modal: true,
buttons: {
Continue: function () {
if(success) success();
$(this).dialog("close");
},
Cancel: function () {
if(cancel) cancel();
$(this).dialog("close").slideUp();
}
}
});
}
你可以这样调用这个函数:
checkfn(function () {
alert('success!');
}, function () {
alert('failure!');
});
答案 1 :(得分:1)
只需在“继续”和“取消”按钮定义中输入您想要执行的操作即可。因此,您不需要dialogResult,并且在需要时会发出警报。
if (document.getElementById('<%=HomeInstSelected.ClientID%>').value == 'False') {
var dialogResult = false;
$("#dialog-confirm").dialog({
resizable: false,
height: 140,
modal: true,
buttons: {
Continue: function () {
alert('Dialog result is true. I can do whatever I want here');
$(this).dialog("close");
},
Cancel: function () {
alert('Cancel is clicked. I should go on my life');
$(this).dialog("close").slideUp();
}
}
});
}
else {
$("#dialog-HomeInstitutionPrompt").dialog({
height: 140,
modal: true
});
}
- 您无法为函数返回值,因为在函数初始化之后,代码会继续。您需要填写继续按钮定义。
答案 2 :(得分:1)
这也是我在开始时遇到的问题,代码没有像在页面上读取的那样运行。当您调用对话框函数时,它将异步执行。 continue和cancel函数绑定到按钮上的单击操作,同时对话框函数下面的代码运行而不等待事件。
长话短说,结果需要在取消和继续回调中发生。
问题是当你真的应该传递结果函数时,你试图返回一个布尔值。 jquery和javascript中的很多东西一般都是这样工作的。值得庆幸的是,该语言提供了以这种方式编程的能力。
function checkfn( resultfn(boolval) ) {
if (document.getElementById('<%=HomeInstSelected.ClientID%>').value == 'False') {
var dialogResult = false;
$("#dialog-confirm").dialog({
resizable: false,
height: 140,
modal: true,
buttons: {
Continue: function () {
resultfn.call( this, true );
$(this).dialog("close");
},
Cancel: function () {
resultfn.call( this, false );
$(this).dialog("close").slideUp();
}
}
});
}
将if语句放在“resultfn”
中答案 3 :(得分:0)
我有一个类似的令人沮丧的问题,即jQuery对话框在用户有机会选择是或否之前提交表单。
示例HTML:
<form id="myForm" method="POST" action="/Where/To/Go">
<input type="submit" value="Submit" onclick="submitForm()"/>
</form>
和jQuery:
function submitForm() {
$('<div title="Submit Form>Are you sure you wish to submit the form?</div>').dialog({
modal: true,
buttons: [
{
text: "Yes",
click: function () {
$('#myForm').submit();
$(this).dialog("close");
}
}, {
text: "No",
click: function () {
$(this).dialog("close");
}
}
]
});
}
要解决此问题,我将按钮从submit
类型更改为button
类型,这样就停止了它同时提交和触发jQuery对话框:
<input type="button" value="Submit" onclick="submitForm()"/>