如何在jQuery中将两个事件处理程序组合成一个?

Tin*_*n81 5 jquery

有没有一种简单的方法将这两个jQuery函数合二为一,从而消除了不必要的重复?

$('form#search input').on('keyup', function() {
    if ($(this).val() == '') {
    $('a#clear').hide();
  }
  else {
    $('a#clear').show();
  } 
});

$('form#search select').on('change', function() {
    if ($(this).val() == '') {
    $('a#clear').hide();
  }
  else {
    $('a#clear').show();
  }
});
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

Jor*_*lva 9

如果你想以最优雅,最短的方式有条件地绑定它们,你可以这样做:

var $formSearch = $('form#search'),
    hideShow = function () {
        if ($(this).val() == '') {
          $('a#clear').hide();
        }
        else {
          $('a#clear').show();
        }
    };

$formSearch.find('input').on('keyup', hideShow); 
$formSearch.find('select').on('change', hideShow); 
Run Code Online (Sandbox Code Playgroud)

如果您希望为两个选择器触发两个事件,则可以执行此操作.这可能是可以的,因为您可能希望无论如何都要触发它们.

$('form#search input, form#search select').on('keyup change', function() {
    if ($(this).val() == '') {
    $('a#clear').hide();
  }
  else {
    $('a#clear').show();
  }
});
Run Code Online (Sandbox Code Playgroud)


Sli*_*ete 6

定义一个函数来处理事件,然后按如下方式分配它:

function inputChanged() {
    if ($(this).val() == '') {
        $('a#clear').hide();
    }
    else {
        $('a#clear').show();
    }
}

$('form#search input').on('keyup', inputChanged);
$('form#search select').on('change', inputChanged);
Run Code Online (Sandbox Code Playgroud)