首先是一些重要的信息。我无法改变所使用的调用,代码,函数等中的任何内容。所以底线是我必须使用一种解决方法。
好的我有一个包含一些字段和下拉列表的表单。
在加载该表单时,我使用一些jquery隐藏了一个特定的字段。当值与数组中的某个值匹配时,该字段将被隐藏。我面临的问题是,当我们使用dropdown
时,会对外部服务(对于国家/地区)进行json调用,然后正在更新表单。
由于在成功完成json调用之后我无法访问更新表单的代码,因此我需要找到一些内容来检查是否所有内容都已完成加载,如果是,则再次隐藏我的特定字段。
说清楚:
<div class="checkout-shipment-methods hidden">
<input id="EuPack" name="shipment_method" value="EuPack" type="radio">
<label for="EuPack">Delivered at home</label>
</div>
<div class="checkout-shipment-methods">
<input id="Pack" name="shipment_method" value="Pack" type="radio">
<label for="Pack">Delivered at work</label>
</div>
<select id="billing_address-country" name="billing_address[country]">
<option value="be" selected="selected">België</option>
<option value="dk">Denemarken</option>
<option value="de">Duitsland</option>
</select>
现在隐藏了 input
。当我更改select
时,表单会更新,并且类hidden
会被删除。
所以我想检查是否进行了这些调用,如果是,再次添加该类hidden
。
像这样:
$(function(){
var a = [ 'FP32PE4','FP32LE4' ];
var b = [ 'FP32PE1','FP32PE4' ];
$.each( a, function( key, value ) {
var index = $.inArray( value, b );
if( index != -1 ) {
var $id = $('.checkout-shipment-methods:first-of-type');
$id.addClass('hidden');
localStorage.setItem("selectedolditem", $id);
$.ajax({
url: "url-to-link-in-image/nl/checkout/onestep/details/",
beforeSend: function( xhr ) {
xhr.overrideMimeType( "text/plain; charset=x-user-defined" );
}
}).
then(function( data, textStatus, jqXHR ) {
console.log('success');
var selectedolditem = localStorage.getItem('selectedolditem');
if (selectedolditem != null) {
$('.checkout-shipment-methods:first-of-type').addClass("hidden");
}
},
function( jqXHR, textStatus, errorThrown ) {
console.log('fail')
});
}
});
});
这甚至可能吗?
答案 0 :(得分:2)
好的,所以你可以简单地捕获ajaxComplete
事件,每当ajax被触发时触发..执行类似这样的事情:
$( document ).ajaxComplete(function( event, xhr, settings ) {
if ( settings.url.indexOf( "nl/service/regions/" ) != '-1' ) {
$('.checkout-shipment-methods:first-of-type').removeClass("hidden");
}
});
这应该有用,很少探索: