代码之家  ›  专栏  ›  技术社区  ›  FoggyDay

Javascript/jQuery:如何在页面加载时调用“onchange()”回调?

  •  -1
  • FoggyDay  · 技术社区  · 4 年前

    我有一个ASP。Net Core web表单,包含许多组可以隐藏或显示的输入项,具体取决于用户输入并存储在数据库中的值。

    这是一个回调函数,每当用户更改下拉菜单中的值时,它都会“显示”或“隐藏”子菜单,效果很好:

    $('#DW_Answers_Q430').change(function (e) {
        let a = $('#DW_Answers_Q430').val();
        if (a == "None")
          $('#DW_Q430_grp').css('display','none');
        else $('#DW_Q430_grp').css('display','block');
    });
    

    Q: 当加载“编辑”菜单时,我如何调用此回调,以确保子菜单正确显示或隐藏,具体取决于从数据库加载的值?

    这是我尝试过的:

    编辑.cshtml:

    @section Scripts {
        @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
        <script type="text/javascript">
            window.onload = function () {
                ...
                dw_refresh();
                ...
            };
        </script>
    }
    

    site.js:

    function dw_refresh() {
        console.log('dw_refresh()...');   // <-- dw_refresh() gets invoked
        ...
        var a = $('#D_Answers_Q430').val();
        $('#DW_Answers_Q430').val(a).change();  // <-- But the callback never gets invoked
        ...
    

    Q: 我如何调用我的回调,以确保在首次加载“编辑”页面时正确显示子菜单?


    解决方案:

    1. 删除dw_refresh()

    2. 替代品 bind('load change') :

      $('#DWare_Answers_Q430').bind('load change', function () { 
         let a = $('#DW_Answers_Q430').val();
         console.log('DW_Answers_Q430, val:', a);
         if (a == "None")
            $('#DW_Q430_grp').css('display','none');
         else $('#DW_Q430_grp').css('display','block');
      });
      
    0 回复  |  直到 4 年前
        1
  •  0
  •   Louys Patrice Bessette    4 年前

    在这一行:

    $('#DW_Answers_Q430').val(a).change();
    

    .change() 是事件侦听器 设定器 它应该传递一个处理程序函数。

    要触发 change 事件,你需要的是:

    $('#DW_Answers_Q430').val(a).trigger("change");
    

    Documentation