使用jQuery自定义JS Confirm Modals.延迟和基于按钮的返回值问题
Custom JS Confirm Modals using jQuery.Deferred and issues with return values based on buttons
我是一名java开发人员,最近刚刚进入Javascript世界,所以如果我犯了一些愚蠢的错误或假设,请原谅我。我正试图将我们的原生浏览器/js"Confirm"对话框转换为主要使用主干框架开发的自定义模式。目前,这些模式不支持"确认"类型的功能。我认为主要的问题是我的模态目前没有异步工作。
我正在调用一个打开模态的方法,我希望从调用中返回一个"true"或"false"值,这取决于用户单击了哪个按钮。然而,目前我的方法在模态显示后立即返回,并且不等待按钮单击。模态系统支持对每个按钮进行单独的回调,这可以在调用"openPortletModal"方法时定义,我将在下面演示。但是,"confirmDiscard"方法返回一个未定义的值,而无需等待任何按钮调用。我的问题是,是否可以暂停方法的执行,直到进行回调?
在研究过程中,我确实发现了一些关于jQuery.Deferred的信息,但我还没有找到一种明确的方法来利用它来获得我想要的功能,而且我看到的示例似乎都没有包含基于回调的不同返回值。
这是我的示例代码:
confirmDiscard: function(context) {
var deferred = new $.Deferred();
MyModal.openPortletModal(context, null, {
views: [{
name: "auth",
title: "Confirmation",
renderResponseData: "This is a test", //Message that modal renders
buttons: [{
type: "FINISH",
label: "OK",
click: function() {
console.log("CLICKED OK");
deferred.resolve("true"); //this is ultimately what I'd like to return from the confirmDialog() method
return false; //Modal system expects a "false" value from callback if there is no AJAX call to be made.
},
}, {
type: "CANCEL",
click: function() {
console.log("CLICKED CANCEL");
deferred.resolve("false");
return false;
},
}]
}]
});
deferred.done(function(value) {
alert(value); //This does get called on button click, but by now the confirmDiscard method has already returned.
return value;
})
return deferred.promise();
},
给定这种模式,javascript中有没有一种方法可以让这个方法等待模态响应?
我建议您采用与您类似的方式,但有点不同。我希望它能帮助你。
cutomConfirm: function(text) {
var d, rendered, template,
_this = this;
template = $('#custom_confirm_temp');
rendered = $.tmpl($(template).template(), {
text: text || ''
});
$.blockUI({
message: rendered,
showOverlay: true,
onUnblock: function() {
return $(document).unbind('click');
},
css: {
width: '600px',
height: '150px',
opacity: '1',
border: '0',
backgroundColor: 'none'
}
});
d = $.Deferred();
rendered.find('#OK').click(function() {
$.unblockUI();
return d.resolve();
});
rendered.find('#CANCEL').click(function() {
$.unblockUI();
return d.reject();
});
return d;
}
您需要创建模板(id="custom_confirm_temp"),并在需要时调用。
相关文章:
- 后退按钮问题
- Javascript上传按钮问题,适用于Wordpress
- 点击jquery上的按钮问题
- Safari浏览器返回按钮问题
- 表单操作过程中出现后退按钮问题
- 单选按钮切换按钮问题
- JavaScript/jQuery .click() 按钮问题
- 页面哈希和后退按钮问题 phonegap+Jquery
- 角度 UI 路由器后退按钮问题
- 将多个事件附加到 IE 中的按钮问题
- css 按钮宽度作为百分比?响应按钮问题
- JQuery 未检查单选按钮问题
- JavaScript 单选按钮问题
- 重置按钮问题
- Ember.js路由和后退按钮问题
- jquerymobile动态更改按钮问题的文本
- AngularJS中的Skype URI按钮问题
- 使用 jquery 多次点击按钮问题
- Windows Phone PhoneGap应用返回按钮问题
- 使用jquery和php提交按钮问题