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

如何将函数同时作为事件处理程序和接受参数的可调用函数编写?

  •  4
  • nfm  · 技术社区  · 14 年前

    下面是一个用作事件处理程序的函数,它利用 this

    function validate() {
      if (this.val() == '') {
        return false;
      }
    }
    
    $(':input').change(validate);
    

    下面是重写的同一个函数,用于获取参数,以便我可以显式调用它:

    function validate(field) {
      if ($(field).val() == '') {
        return false;
      }
    }
    
    validate($('#customer_name'));
    

    validate 二者都 一个事件处理程序,并作为一个独立的函数供我调用?

    2 回复  |  直到 14 年前
        1
  •  10
  •   John Kugelman Michael Hodel    14 年前

    有多种方法可以做到这一点。一种是使用第二种方法,将字段作为参数,并使用闭包设置事件处理程序:

    function validate(field) {
      if ($(field).val() == '') {
        return false;
      }
    }
    
    // Use anonymous function to pass "this" to validate.
    $(':input').change(function() { validate(this); });
    
    // Unchanged.
    validate($('#customer_name'));
    

    另一种方法是使用第一种形式 apply() 用重写的 this :

    function validate() {
      if ($(this).val() == '') {
        return false;
      }
    }
    
    // Unchanged.
    $(':input').change(validate);
    
    // Use `$(...)` as "this" when calling validate.
    validate.apply($('#customer_name'));
    
        2
  •  5
  •   Anurag    14 年前

    this field 不是作为论据给出的。

    function validate(field) {
        return $(field || this).val() != '';
    }
    
    $(':input').change(validate); // using this context
    validate($('#someInput'));    // using a parameter