用于 intlTelInput 的 jquery 无法添加事件侦听器

Posted

技术标签:

【中文标题】用于 intlTelInput 的 jquery 无法添加事件侦听器【英文标题】:jquery for intlTelInput can't add event listener 【发布时间】:2019-06-24 09:57:20 【问题描述】:

尝试执行类似于国家代码侦听器下拉列表的操作,但使用应填充国家代码的文本框(以便我随后可以在 php 代码中使用该值)。

添加事件监听器不起作用:

<script>

$(document).ready(function()

    $("#mobile").intlTelInput(
			onlyCountries: ["au","ca","us","nz","gb"],
    	utilsScript: "<?php echo get_template_directory_uri(); ?>/intl-tel-input/build/js/utils.js",
    	geoIpLookup: function(callback) 
		  	$.get("https://ipinfo.io", function() , "jsonp").always(function(resp) 
		    	var countryCode = (resp && resp.country) ? resp.country : "";
		    	callback(countryCode);
		  	);
		,
    	initialCountry: "auto"
    ).addEventListener('countrychange', function() 
			$("#country_code").value = "changed"
		);;

    $('#verify').attr('disabled','disabled');
    $("#mobile").on('input', function() 
    	if ($("#mobile").intlTelInput("isValidNumber")) 
			$('#verify').removeAttr('disabled');
			$("#country_code").innerhtml = "changed"
    	 else 
    		$('#verify').attr('disabled','disabled');
    	

    );

    $("#register-form").submit(function() 
		$("#mobile").val($("#mobile").intlTelInput("getNumber"));

	);
);
</script>

【问题讨论】:

“不起作用”是什么意思。您的代码中在何处/如何触发事件? 不幸的是,它不会触发任何事情。目的是,当我更改 #mobile 字段(即 int-tel-input 字段)上的国家/地区更改时,其下方的文本字段会更改文本。该事件根本没有被触发。 【参考方案1】:

也许,你问这个问题已经几个月了,下面是解决方案。

您误解了addEventListener。这可能是任何其他 javascript 框架的功能。但不是 jQuery 的。

初始化后将以下代码用作脚本。您可以使用countryData.dialCode 为您提供国家/地区代码。

jQuery("#mobile").on('countrychange', function(e, countryData)
    console.log(countryData.dialCode);
)

以下是intlTelInput 返回的示例countryData

 areaCodes: null, dialCode: "44", iso2: "gb", name: "United Kingdom", priority: 0 

我的工作版本是(这是基于 Intelinput 的 jQuery 库版本)

var mobile_with_country_code = '<?php echo $mobile_with_country_code; ?>';
        
        var mobile_number_input = document.querySelector("#mobile");

        mobile_number = window.intlTelInput(mobile_number_input, 
            initialCountry: "ae",
            separateDialCode: true,
            preferredCountries: ["ae","bh","kw","om","qa","sa"],
        );

        if(mobile_with_country_code != '')
            mobile_number.setNumber(mobile_with_country_code);
        

        jQuery('#country_code').val(mobile_number.getSelectedCountryData().dialCode);

        mobile_number_input.addEventListener("countrychange", function() 
          jQuery('#country_code').val(mobile_number.getSelectedCountryData().dialCode);
        );

【讨论】:

我的 countryData 始终未定义,我尝试在手机输入端调用 getSelectedCountryData 但也未定义 @MohammadAli 分享一些代码可以帮助我们帮助您 jQuery("#mobile").on('countrychange', function(e, countryData) console.log(countryData.dialCode); ) 在日志中给了我未定义的信息。 我必须致电phoneNumberInput.intlTelInput("getSelectedCountryData") 才能获得所选国家/地区的数据 @MohammadAli 我已经编辑了我的答案并附加了工作版本代码

以上是关于用于 intlTelInput 的 jquery 无法添加事件侦听器的主要内容,如果未能解决你的问题,请参考以下文章

关于 intlTelInput 中国家/地区代码的更改事件

使用 jquery 验证验证国际电话输入

下拉菜单不适用于移动浏览器

使用 intlTelInput 获取完整号码

如何将国家拨号代码放在 intlTelInput 中的括号中

无法集成 intl-tel-input - window.intlTelInput 不是函数