从上下文中删除时,jQuery函数不会运行

时间:2016-07-06 15:59:57

标签: javascript jquery

此代码具有我想要的行为,但我希望在页面最初加载时也会发生此行为: (jsfiddle:https://jsfiddle.net/1px1t57s/

$(document).ready(function(){
    $('#id_repeat_type').on('change', function() {
      if (this.value == 'NR')
      {
        $("#repeat-options").hide();
      }
      else
      {
        $("#repeat-options").show();
      }
    });
});

我的第一个想法是使用"更改负载"或者"准备就绪"而不只是改变",但这并没有改变行为(可能是因为该函数已经包含在$(document).ready中?)

我的下一个想法是将该功能拉出并单独运行以及更改,但是当我删除该功能时,它破坏了现有功能:https://jsfiddle.net/1px1t57s/1/

我错过了什么?

3 个答案:

答案 0 :(得分:0)

您需要触发select on document.ready的更改事件,如下所示

$(document).ready(function(){
    $('#id_repeat_type').trigger('change');

    $('#id_repeat_type').on('change', function() {
        if (this.value == 'NR')
        {
            $("#repeat-options").hide();
        }
        else
        {
            $("#repeat-options").show();
        }
    });
});

答案 1 :(得分:0)

这是基于你的小提琴修改的javascript:

$(document).ready(function(){
    toggle_options();
    function toggle_options() {
      if ($('#id_repeat_type').val() == 'NR')
      {
        $("#repeat-options").hide();
      }
      else
      {
        $("#repeat-options").show();
      }
    };
    $('#id_repeat_type').on('change', toggle_options);
});

这将创建一个函数,并首先运行它。 if声明中有一个拼写错误。此外,当您在on('change',toggle_options)中调用该函数时,请不要包括括号(即NOT toggle_options()

答案 2 :(得分:0)

调用.change()最初致电change-handler

请注意,带有toggle的{​​{1}}可用于Boolean个元素

show/hide
$(document).ready(function() {
  function toggle_options() {
    $("#repeat-options").toggle(this.value != 'NR');
  };
  $('#id_repeat_type').on('change', toggle_options).change();
});