代码之家  ›  专栏  ›  技术社区  ›  Pablo Araya

jQuery,在输入[type=radio]时更改验证内容如果为false,则调用其他2个函数

  •  1
  • Pablo Araya  · 技术社区  · 6 年前

    我试图创建一个事件,根据 id input[type=radio] 。如果单击的Id不同于 maybe_evtDiag ,它应该调用 this.applySubConditionalRequired(); this.bindUISubActions(); .为什么我的代码不起作用?

    var SubFormStuff = {
    
      init: function()
        this.applySubConditionalRequired();
        this.bindUISubActions();
      },
    
      bindUISubActions: function() {
        // when a radio or checkbox changes value, click or otherwise
        $("input[type='radio'].stepThreeDiag").change(function() {
          if($(this).attr("id") == "maybe_evtDiag") {
            $(this).prop('checked', false);
          }else{
    
           //this is not working //
            applySubConditionalRequired(this);
            displaySubFormRequired(this);
    
          }
        });
      },
    
      applySubConditionalRequired: function() {
        $(".require-if-subevent-active").each(function() {
          var el = $(this);
          // does something
        });
      },
    
      displaySubFormRequired: function() {
        $(".div-subevent-class").each(function() {
          var el = $(this);
          // does something else
        });
      }
    
    };
    
    SubFormStuff.init();
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Tot Zam    6 年前

    就像你在 init() ,添加对对象的引用( this )要调用同级函数(不丢失上下文),请执行以下操作:

    bindUISubActions: function() {
      var _SubFormStuff = this;
      // when a radio or checkbox changes value, click or otherwise
      $("input[type='radio'].stepThreeDiag").change(function() {
        if($(this).attr("id") == "maybe_evtDiag") {
          $(this).prop('checked', false);
        } else{    
          _SubFormStuff.applySubConditionalRequired();
          _SubFormStuff.displaySubFormRequired();
        }
      });
    

    有关的更多详细信息 scope and context in JavaScript

        2
  •  1
  •   muecas    6 年前

    您应该调用如下方法:

    bindUISubActions: function() {
    
        // Store the reference to the current object
        var self = this;
    
        // when a radio or checkbox changes value, click or otherwise
        $("input[type='radio'].stepThreeDiag").change(function() {
            if($(this).attr("id") == "maybe_evtDiag") {
                $(this).prop('checked', false);
            } else{
                self.applySubConditionalRequired();
                self.displaySubFormRequired();
            }
        });
     }
    

    这样你就可以 self 当前作用域,并稍后在同一执行作用域中的任何其他函数调用中使用它。

    More about javascript scope

        3
  •  0
  •   Antonio Pangallo    6 年前

    你想打电话 applySubConditionalRequired(此) displaySubFormRequired(此) 在错误的上下文中,应获取applySubConditionalRequired,并且未定义displaySubFormRequired。

    尝试以下操作:

    bindUISubActions: function() {
       // when a radio or checkbox changes value, click or otherwise
       var that = this;
       $("input[type='radio'].stepThreeDiag").change(function() {
           if($(this).attr("id") == "maybe_evtDiag") {
           $(this).prop('checked', false);
           }else{
    
           //it should work now //
           that.applySubConditionalRequired(this);
           that.displaySubFormRequired(this);
    
          }
      });
    },