UPS, USPS 및 FEDEX와 통신하는 클라이언트의 WP 플러그인을 작성 중입니다. USPS에는 여러 단계가 필요하므로 AJAX (PHP)를 통해 동적으로 내용을 추가하는 UI 대화 상자 모달을 사용하고 있습니다. 내용은 훌륭하지만 첫 번째 대화 상자에서 계속 버튼을 클릭하면 모든 연속적인 대화 상자 버튼 기능이 실행되는 것 같습니다. 대화 내용을 변경하기 위해 호출하는 함수가 있고 각 호출 함수는 AJAX 데이터를 보내고 다음 대화 상자의 옵션을 설정합니다. 단순히 버튼의 기능을 완료하고 사용자가 다음 대화 상자에서 선택하도록 허용해야합니다. 언젠가는 JQuery, JS 및 PHP를 사용하고 있지만 jQuery UI는 상당히 새로운 것입니다. 참조를 위해 아래 코드를 참조하십시오. 이것에 대한 도움은 크게 감사 할 것입니다.Jquery UI 대화 상자 버튼 여러 번 클릭 이벤트 발생
"obj"는 shippment 데이터와 html을 포함하는 PHP에서 반환 된 객체입니다.
show_dialog = function(title, html, options) {
$("#dialog").dialog({
autoOpen: false,
});
$('#dialog').html(html);
$('#dialog').dialog('option', 'title', title);
$('#dialog').dialog(options);
$('div.ui-dialog-buttonset button.ui-button span.ui-button-text').each(function() {
$(this).html($(this).parent().attr('text'));})
}
기능 주소 확인을 위해 대화 내용을 업데이트
기능
usps_address_check = function(obj) {
if(obj.VStatus === 'AddressMatch') {
var title = obj.Title;
var options = {
resizable: false,
width:800,
modal:true,
buttons: {
//when this button is clicked it fires the function in the next dialog below process shipment.
'Continue': function(event) {
if($('#verified').attr('checked')) {
data = {
action: 'usps_ajax',
call: 'check_rate',
post: $('#post_id').val(),
};
ajax_request(data);
} else {
$(this).dialog('option', 'title', "Please click the checkbox to confirm corrected address...");
}
},
Cancel: function() {
$(this).dialog('close');
}
}
}
}
show_dialog(title, obj.StatusMessage, options);
$('#dialog').dialog('open');
}
기능 USPS
와 처리 선적 요청 이전에 운송 요금 및 선택 서비스 애드온을 확인하는usps_confirm_rates = function(obj) {
var title = obj.Title;
var html = obj.StatusMessage;
var options = {
resizable: true,
width:800,
height:800,
modal:true,
buttons: {
//This function is fired when the button on the first modal above is clicked.
'Process Shipment': function() {
data = {
action: 'usps_ajax',
call: 'process_shipment',
post: $('#post_id').val(),
};
ajax_request(data);
},
'Cancel': function(e) {
$(this).dialog('close');
}
}
}
show_dialog(title, html, options);
var total_shipping = parseFloat($('#total_shipping').text());
var customer_paid = parseFloat($('#shipping_paid').text());
var total_addons = parseFloat($('#total_addons').text());
var difference;
$('.btn_addons').click(function(e) {
var key = $(this).attr('id');
$('#' + key + '_addon_options').slideToggle();
$('.cb_addon_sel').change(function(e) {
var addons = obj.AddOns;
var thisCheck = $(this);
var thisTable = $(this).closest('table').attr('id');
var curr_addon = $(this).val();
var addon_name = $("#" + curr_addon + "_name").text();
var thisAddon = new Array();
var price = get_price(thisTable, curr_addon);
if(obj.AddOns[thisTable][curr_addon].ProhibitedWithAnyOf !== undefined) {
var prohibited = obj.AddOns[thisTable][curr_addon].ProhibitedWithAnyOf.AddOnTypeV5;
}
if(obj.AddOns[thisTable][curr_addon].RequiresAllOf !== undefined) {
var required = obj.AddOns[thisTable][curr_addon].RequiresAllOf.RequiresOneOf.AddOnTypeV5;
}
if($(this).attr('checked')) {
total_addons += parseFloat(price);
total_shipping += parseFloat(price);
if(addons_selected[thisTable] === undefined)
addons_selected[thisTable] = new Array();
addons_selected[thisTable].push(curr_addon);
for(var p in prohibited) {
if(typeof prohibited === 'object')
element = prohibited[p];
else
element = prohibited;
$('#' + thisTable + '_row_' + element).hide();
if($('#' + thisTable + '_' + element).attr('checked')) {
$('#' + thisTable + '_' + element).removeAttr('checked');
}
}
for(var r in required) {
if(typeof required === 'object')
element = required[r];
else
element = required;
price = get_price(thisTable, element);
$('#' + thisTable + '_' + element).attr('checked', 'checked');
total_addons += parseFloat(price);
total_shipping += parseFloat(price);
}
} else {
var name = addon_required(curr_addon, thisTable);
if(typeof name === 'string') {
$('#' + curr_addon + '_info').text('Required when ' + name + ' is selected.');
$('#' + thisTable + '_' + curr_addon).attr('checked','checked');
} else {
total_addons -= parseFloat(price);
total_shipping -= parseFloat(price);
for(var p in prohibited) {
if(typeof prohibited === 'object')
element = prohibited[p];
else
element = prohibited;
$('#' + thisTable + '_row_' + element).show();
//removeByValue(prohibited[p], prohibited);
}
for(var r in required) {
if(typeof required === 'object')
element = required[r];
else
element = required;
price = get_price(thisTable, element);
$('#' + thisTable + '_' + element).attr('checked', 'checked');
$('#' + thisTable + '_' + element).removeAttr('checked');
$('#' + element + '_info').text('');
total_addons -= parseFloat(price);
total_shipping -= parseFloat(price);
//removeByValue(required[r], required);
}
removeByValue(curr_addon, addons_selected[thisTable]);
}
}
difference = customer_paid - total_shipping;
$('#total_addons').text(total_addons.toFixed(2));
$('#total_shipping').text(total_shipping.toFixed(2));
$('#total_difference').text(difference.toFixed(2));
});
});
function addon_required(addon, box) {
if(typeof required === 'undefined') {
return false;
} else {
for(var a in addons_selected[box]) {
var reqs = obj.AddOns[box][addons_selected[box][a]].RequiresAllOf.RequiresOneOf.AddOnTypeV5;
if($.inArray(addon, reqs) == -1) {
return false;
} else {
return $("#" + addons_selected[a] + "_name").text();
}
}
}
}
function get_price(box, addon) {
if(obj.AddOns[box][addon].Amount === undefined) {
price = 0.00;
} else {
price = obj.AddOns[box][addon].Amount;
}
return price;
}
}