我有一个Javascript函数,可以根据可用的地址列表自动填充表单字段。如果用户选择的选项是美国以外的国家/地区,我们将不会要求填写的表单中的邮政编码/州字段(所有"必需"验证通过"数据需要=真&#34)。表单是动态生成的,因此我不能使用某些人建议的.change()方法。
我有一个"变化"监听器设置删除"数据所需"属性,如果单击“国家/地区”下拉列表并选择其他国家/地区,则可以使用但是,当Javascript函数更改相同的下拉列表时,它不起作用。
jQuery( document ).ready(function() {
jQuery('body').on('change','#coHCOUN',function() {
if(jQuery(this).val() == 'US') {
jQuery('#coHPOST').attr('data-required','true');
jQuery('#coHSTE').attr('data-required','true');
} else {
jQuery('#coHPOST').removeAttr('data-required');
jQuery('#coHSTE').removeAttr('data-required');
}
});
});
在选择地址时抓取隐藏的表单值并将其应用于表单的函数。这是用vanilla javascript编写的旧代码,而不是jQuery:
function SetShipTo(CIPID) {
document.getElementById("coHNAME").value=document.getElementById("vSHIPTO" + CIPID + "HNAME").value;
document.getElementById("coHATN").value=document.getElementById("vSHIPTO" + CIPID + "HATN").value;
document.getElementById("coHAD1").value=document.getElementById("vSHIPTO" + CIPID + "HAD1").value;
document.getElementById("coHAD2").value=document.getElementById("vSHIPTO" + CIPID + "HAD2").value;
document.getElementById("coHAD3").value=document.getElementById("vSHIPTO" + CIPID + "HAD3").value;
document.getElementById("coHSTE").value=document.getElementById("vSHIPTO" + CIPID + "HSTE").value;
document.getElementById("coHPOST").value=document.getElementById("vSHIPTO" + CIPID + "HPOST").value;
document.getElementById("coHCOUN").value=document.getElementById("vSHIPTO" + CIPID + "HCOUN").value;
document.getElementById("coHVIA").value=document.getElementById("vSHIPTO" + CIPID + "HVIA").value;
document.getElementById("coHSHPR").value=document.getElementById("vSHIPTO" + CIPID + "HSHPR").value;
document.getElementById("coCIPLOC").value=document.getElementById("vSHIPTO" + CIPID + "CIPLOC").value;
document.getElementById("SAVESHIPTOFU").checked=false;
}
我可以添加另一个事件监听器来检测某个值是否从javascript函数更改?如果可能的话,我不想在自动填充功能中添加额外的代码
答案 0 :(得分:4)
触发更改内部功能的下拉列表更改,可以在这里帮助您
$('#coHCOUN').trigger('change')
答案 1 :(得分:1)
如果设置下拉列表的javascript(我假设它是选择标记)正在使用jQuery,您可以使用挂钩强制更改事件在$(' #select&#)时触发39;)。val('选项')被调用。这样您就不需要修改正在更改下拉列表的代码,该代码可能位于库中。
这样的事情:
$.valHooks.select = {
get: function(elem) {
return $(elem).val();
},
set: function(elem, value) {
$(elem).val(value).trigger('change');
}
};
在事件触发时可能没有注册值更改,因此触发器可能需要进入setTimeout。您可以省略get函数,我不确定。
答案 2 :(得分:0)
我认为您必须将更改侦听器指向下拉元素:
$(#coHCOUN).change(function(){
if(jQuery(this).val() == 'US') {
jQuery('#coHPOST').attr('data-required','true');
jQuery('#coHSTE').attr('data-required','true');
} else {
jQuery('#coHPOST').removeAttr('data-required');
jQuery('#coHSTE').removeAttr('data-required');
}
});