我想要一个非常简单的自定义对话框。当我单击删除时,我想要一个简单的面板打开,并提供确认或取消选项。如果确认,将运行更多的东西。
由于我想在不同的文件中使用此确认,这是我的方法:
在我拥有的所有页面上运行的index.js中:
var confirmation = -1
$(document).ready(function(){
$('html').on({
click: function() {
confirmation = 1;
}
},'#confirmation_yes');
$('html').on({
click: function() {
confirmation = 0;
}
},'#confirmation_no');
});
function confirmAction(callback)
{
if( confirmation == 1 ) {
$('#popup_panel').slideUp('slow', function(){
$('#popup_fader').fadeOut('fast');
});
confirmation = -1;
callback(true);
}
if( confirmation == 0 ) {
$('#popup_panel').slideUp('slow', function(){
$('#popup_fader').fadeOut('fast');
});
confirmation = -1;
callback(true);
}
setTimeout(confirmAction, 50)
}
所以我的想法是,然后在其他JS文件中,我们有
$('#element').click(function(){
confirmAction(function(result){
// do my stuff
});
})
所以当我这样做时,系统会返回错误并说“回调”不是一个函数。这段代码有什么问题?
由于
答案 0 :(得分:0)
我做了另一种方法。它基于jQueryMobile,但经过一些小修改后也可以与普通的jQuery一起使用。基本很简单:你调用一个打开弹出窗口的函数,并添加两个按钮,通过调用opener-function对你提供的函数作出反应。这是我的例子:
function jqConfirm(data) {
var container = $('#genericConfirm');
container.find('h1').html(data.title); // title of the confirm dialog
container.find('p').html(data.message); // message to show
// .off('click') removes all click-events. click() attaches new events
container.find('.yes').off("click").click(data.yes); // data.yes/no are functions that you provide
container.find('.no').off("click").click(data.no);
container.popup({ positionTo: "window" }).popup("open"); // .popup("open") opens the popup
}
var confirmData = {
title: "Send this message?",
message: "Are you sure you want to send this message?",
yes: function() {
sendMessage();
$('#genericConfirm').popup("close");
},
no: function() {
$('#genericConfirm').popup("close");
}
};
jqConfirm(confirmData); // you open the popup with this function (indirectly)
HTML部分(特定于jQueryMobile,必须稍微修改以匹配普通的jQuery)
<div data-role="popup" id="genericConfirm" data-overlay-theme="a" data-theme="c" style="max-width:400px;" class="ui-corner-all">
<div data-role="header" data-theme="a" class="ui-corner-top">
<h1>Title</h1>
</div>
<div data-role="content" data-theme="d" class="ui-corner-bottom ui-content">
<p style="margin-bottom: 15px;">Message</p>
<div class="ui-grid-a">
<div class="ui-block-a">
<a href="#" data-role="button" data-inline="false" data-theme="a" class="no">Cancel</a>
</div>
<div class="ui-block-b">
<a href="#" data-role="button" data-inline="false" data-theme="g" class="yes">Ok</a>
</div>
</div>
</div>
</div>
答案 1 :(得分:0)
将另一个处理程序附加到处理逻辑的按钮。完成对话框后,只需删除对话框即可删除处理程序。如果稍后创建其他对话框,可能使用相同或其他布局,则可以为该对话框定义不同的处理程序。当事件'冒泡'时,按钮本身的处理程序,作为html上的处理程序(仅在单击按钮时触发)将被触发。
以下仅仅是伪代码,但它应该让您知道如何使用此代码:
//This will create the html for your dialog
createMyFancyDialog();
showDialog();
//This is where you'll do the logic for this dialog
$('#confirmation_yes').on( 'click', function() {
doWhatEveryIWantToDo();
//After this dialog is done, destroy the dialog.
//This will get rid of the handlers we don't need in a future dialog.
//The handler attached to html will persist.
destroyDialog();
} );
$('#confirmation_no').on( 'click', function() {
doSomethingMean();
//After this dialog is done, destroy the dialog.
//This will get rid of the handlers we don't need in a future dialog.
//The handler attached to html will persist.
destroyDialog();
} );
答案 2 :(得分:0)
我尝试重写并修复您的代码,但有太多事情需要调整。
因此,我强烈建议您以更简单的方式重写代码,如下所示:
<button id="element">Element</button>
<div id="popup_panel" style="display: none;">
<p>Your msg?</p>
<button id="confirmation_yes" >Yes</button>
<button id="confirmation_no">No</button>
</div>
<script>
$(document).ready(function () {
$('#confirmation_yes').click(actionConfirmed);
$('#confirmation_no').click(actionNotConfirmed);
$('#element').click(showPopupPanel);
});
function actionConfirmed() {
$('#popup_panel').slideUp();
// User confirmed. Now continue.
// e.g. alert('Yes was clicked');
}
function actionNotConfirmed() {
$('#popup_panel').slideUp();
// User said no.
}
function showPopupPanel() {
$('#popup_panel').slideDown();
}
</script>
您可以在此处查看此代码: http://jsfiddle.net/LGTSK/
答案 3 :(得分:0)
保持简单:
<!doctype html>
<html lang="en">
<head>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
<input id='yes' type="button" value="Yes" data-result="Yes" />
<input id='no' type="button" value="No" data-result="No" />
<script type="text/javascript">
var result;
function confirmAction() {
if (result) alert(result);
else setTimeout(confirmAction, 100);
}
$(function() {
$('#yes, #no').on('click', function(e) {
result = $(this).attr('data-result');
});
confirmAction()
});
</script>
</body>
</html>