【发布时间】:2015-10-12 12:53:35
【问题描述】:
我有一个 Javascript 函数,它可以根据可用的地址列表自动填充表单字段。如果用户选择的选项是美国以外的国家/地区,我们将不需要填写表单中的邮政编码/州字段(所有“必需”验证都通过“data-required=true”处理)。表单是动态生成的,所以我不能使用某些人建议的 .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 函数中更改?如果可能的话,我不想在自动填充函数中添加额外的代码
【问题讨论】:
-
您是否可以控制更改下拉菜单的 JavaScript?可以提供吗?
-
现在获取代码。将用它更新问题
-
@Thriggle 相似但不同。正如我对 Alex 的回答,该元素是动态生成的,因此该问题中的 .change() 方法将不起作用。我的问题也是,它不是 jQuery 更改下拉值,而是香草 javascript。
-
@BryanZwicker 查看 Clarence Liu 对该问题的回答。通过jQuery更改值时不会触发事件的原因是因为通过vanilla JS更改值时它不会触发。可能的解决方案是通过重复函数 (yuck) 定期检查 DOM,或者编写一个包装函数来更改值 并 触发自定义事件,然后您可以将事件侦听器附加到该事件。
标签: javascript jquery