我有一些html来弹出一个jQuery UI模式:
<a href="my/url" class="popup">Click me</a>
使用此javascript代码:
$('.popup').click(function() {
var a = this;
var dialog = $('<div>').load($(a).attr('href'), function() {
var form = dialog.find('form');
dialog.dialog({
modal: true,
title: $(a).attr('title'),
buttons: {
Add : function () {
$.post($(form).attr('action'), $(form).serialize());
dialog.dialog('close');
},
Cancel: function () {
dialog.dialog('close');
}
}
});
if ($(a).attr('data-third')) {
// Add here a button
}
});
return false;
});
这个想法是模态中的资源包含一个表单,在提交模式时提交表单。现在<a href="my/url" class="popup" data-third="Add & new">Click me</a>
存在时,意味着第三个按钮按此顺序放置在模态中:Cancel
| Add
| Add & new
。
我试过这段代码:
if($(a).attr('data-third')) {
var buttons = dialog.dialog('option', 'buttons');
buttons[$(a).attr('data-third')] = function(){
// Callback here
}
dialog.dialog('option', 'buttons', buttons);
}
我有一个新按钮,但订单是Add & new
| Cancel
| Add
。如何确保订单为Cancel
| Add
| Add & new
?
答案 0 :(得分:0)
未经测试,但我认为数组键应该是buttons.length
,就像这样
if($(a).attr('data-third')) {
var buttons = dialog.dialog('option', 'buttons');
buttons[buttons.length] = function(){
// Callback here
}
dialog.dialog('option', 'buttons', buttons);
}
答案 1 :(得分:0)
使用此代码,您应始终获得取消|添加|添加&amp;新? (从左到右。
$('.popup').click(function() {
var a = this;
var dialog = $('<div>').load($(a).attr('href'), function() {
var form = dialog.find('form');
dialog.dialog({
modal: true,
title: $(a).attr('title'),
buttons: {
Cancel: function() {
dialog.dialog('close');
},
Add: function() {
$.post($(form).attr('action'), $(form).serialize());
dialog.dialog('close');
}
}
});
if ($(a).data('third')) {
var buttons = dialog.dialog('option', 'buttons');
console.log(buttons);
buttons[$(a).data('third')] = function() {
// Callback here
}
dialog.dialog('option', 'buttons', buttons);
}
});
return false;
});
在这里小提琴:http://jsfiddle.net/rqq2p/1/
请记住使用data()而不是attrib()来从链接中获取属性!
编辑 - 基本上“按钮”是一个对象,每个属性都是一个按钮。我认为按钮出现的顺序是添加属性的顺序。在我的例子中,取消是最左边的按钮,因为它是第一个添加的属性并添加&amp;新的它是最右边的,因为它是最新的。如果您需要摆弄订单,可以创建一个新对象并按照您想要的顺序添加属性:
if ($(a).data('third')) {
var buttons = dialog.dialog('option', 'buttons');
var newButtons = {};
newButtons[$(a).data('third')] = function() {
// Callback here
}
newButtons['Cancel'] = buttons['Cancel'];
newButtons['Add'] = buttons['Add'];
dialog.dialog('option', 'buttons', newButtons);//now add & new should be the leftmost
}