我在Fancybox內使用輸入字段和列表來搜索和提取客戶端,並使用2個自定義Ajax函數。重新打開Fancybox導致我的自定義Ajax函數多次調用
一切正常,但是當重新打開相同的Fancybox時,我的Ajax函數將被觸發多次。
1 AJAX功能:
searchClient()
,獲取客戶第二AJAX功能的新名單:
selectClient()
,獲取客戶信息,並關閉 的的fancybox
有沒有辦法來重置fancybox,而不是重新開放? 還是需要重新考慮我的功能結構?如果是這樣,怎麼樣?
更新:我只需要重置我的Fancybox內容,在加載dom時首先將內容分配給變量,並在Fancybox關閉時將此變量的內容放回dom中。這將允許Fancybox再次打開相同的內容,並且再次打開所有更改。
積分爲Nick Tomlin。
修復:
// on DOM ready
var popup = $('#popup-contacts').html();
// Fancybox
$.fancybox.open({
href: '#popup-contacts',
padding: 0,
autoWidth: true,
arrows: false,
closeBtn: false,
scrollOutside: true,
helpers: {
overlay: {
css: {
'background': 'rgba(0, 0, 0, 0.5)'
},
locked: false
}
},
afterShow: function() {
selectClient();
searchClient();
},
afterClose: function() {
$('#popup-contacts').html(popup); // Reset popup content
}
});
原始代碼:
function searchClient() {
$('.popup .search').keyup(function(k) {
if ((k.keyCode >= 48 && k.keyCode <= 90) || (k.keyCode >= 96 && k.keyCode <= 105) || k.keyCode == 8 || k.keyCode == 46 || k.keyCode == 109 || k.keyCode == 189)
{
var search = $.trim($(this).val());
var dataString = 'ajax=true&action=searchClient&search='+encodeURIComponent(search);
$.ajax({
type: 'POST',
url: $(this).attr('rel'),
cache: false,
data: dataString,
dataType: 'json',
success: function(response) {
if (response.status == 'match') {
$('.popup-contacts').find('ul').html(response.clients);
selectClient();
}
if (response.status == 'error') {
$('.popup-contacts').find('ul').html('<li>'+response.message+'</li>');
}
},
error: function() {
}
});
}
});
}
function selectClient() {
$('.popup ul li').click(function() {
var contactNumber = $(this).attr('rel');
var dataString = 'ajax=true&action=selectClient&contactNumber='+contactNumber;
$.ajax({
type: 'POST',
url: $(this).parent().attr('rel'),
cache: false,
data: dataString,
dataType: 'json',
success: function(response) {
if (response.status == 'success') {
$('textarea[name="infoTo"]').focus().val(response.clientInfo);
$.fancybox.close();
}
if (response.status == 'error') {
}
},
error: function() {
}
});
});
}
// Open Fancybox
$('textarea[name="infoTo"]').focus(function() {
if ($.trim($(this).val()) == '')
{
$.fancybox.open({
href: '#popup-contacts',
padding: 0,
autoWidth: true,
arrows: false,
closeBtn: false,
scrollOutside: true,
helpers: {
overlay: {
css: {
'background': 'rgba(0, 0, 0, 0.5)'
},
locked: false
}
},
afterShow: function() {
selectClient();
searchClient();
}
});
}
});
您是否使用FB版本1或2? – megaSteve4 2013-10-28 17:05:38
@ megaSteve4版本2.但我自己修復它。看我的**更新**。 – jlmmns 2013-10-30 11:41:59
@jlmmns如果這個問題得到解決,請添加一個答案(您可以在兩天後接受) - 它會阻止問題出現在未答覆的列表中 – Pete 2013-11-05 14:17:40