繁体   English   中英

如何将函数编写为事件处理程序和带参数的可调用函数?

[英]How do I write a function as both an event handler and a callable function that takes an argument?

这是一个用作事件处理程序的函数,它使用了this函数:

function validate() {
  if (this.val() == '') {
    return false;
  }
}

$(':input').change(validate);

这是为了获取参数而重写的相同函数,因此我可以显式调用它:

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

validate($('#customer_name'));

我怎么可以重写我的validate功能,使其适合用作两个事件处理程序,并作为一个独立的功能给我打电话?

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

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'));

另一种方法是使用第一种形式和使用适用()与覆盖调用它this

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

// Unchanged.
$(':input').change(validate);

// Use `$(...)` as "this" when calling validate.
validate.apply($('#customer_name'));

使用回退来this ,如果field不作为参数给出。

function validate(field) {
    return $(field || this).val() != '';
}

$(':input').change(validate); // using this context
validate($('#someInput'));    // using a parameter

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM