【暂时解决】radio单选框的change事件执行两次

项目场景:

简单的单选框场景
选择国内地区,省市县的下拉框就显示,选择国外地区就隐藏。
【暂时解决】radio单选框的change事件执行两次_第1张图片


问题描述

当我使用radio的change事件时,会执行两次

javascript:

    $('input[type=radio][name=optionsRadios]').change(function () {
        console.log("this.value:" + this.value)
        if (this.value == "国外地区") {
            console.log("国外,省市县隐藏")
			
        } else if (this.value == "国内地区") {
            console.log("国内,省市县回显")
            
        }
    });

html:

<div class="form-group">
     <label class="col-sm-3 control-label">工作地区选择:label>
     
     	<div class="col-sm-9">
          <label class="radio-box">
               <input type="radio" checked="" id="optionsRadios1" name="optionsRadios" 
                    class="optionsRadiosClass"
                    th:value="国内地区">国内地区label>
                    
		 <label class="radio-box">
               <input type="radio" id="optionsRadios2" name="optionsRadios"
               class="optionsRadiosClass"
               th:value="国外地区">国外地区label>  
      div>
      
div>

执行时的控制台打印:
出现问题:change事件执行了两次
【暂时解决】radio单选框的change事件执行两次_第2张图片


原因分析:

可能的原因: radio按钮点击一下触发两次事件


解决方案:

换一种写法,使用 :checked 伪选择器
html不变
JavaScript:

    $('input[type=radio][name=optionsRadios]').change(function () {
        var $selectedvalue = $("input[name='optionsRadios']:checked").val();
        console.log("$selectedvalue:" + $selectedvalue)
        if ("国外地区" == $selectedvalue) {
            console.log("国外,省市县隐藏")
            $("#ssx").prop('style','display: none');

        } else if (undefined == $selectedvalue) {
            console.log("undefined 不做操作")

        } else {
            console.log("国内,省市县回显")
            $("#ssx").prop('style','display: block');

        }
    }).filter(':checked').trigger('change');

控制台截图:虽然还是执行了两次,但好歹多了一个undefined的选择。。。曲线救国嘛
【暂时解决】radio单选框的change事件执行两次_第3张图片
在这里插入图片描述

参考链接

.filter(‘:checked’).trigger(‘change’)的来源: 在页面加载时执行一次并过滤
:checked 伪选择器: radio的change事件

你可能感兴趣的:(bug遭遇记,javascript,html,前端)