将不同选择器的不同事件组合到一个功能中

tim*_*tim 0 jquery events css-selectors

如何在一个相同的函数中组合$('#foo').click()和$('#bar').change()?点击可能无法触发#bar,而#foo则不会被更改触发.

所以假设:

$('#foo').click() + $('#bar').change() (function{
  //...
});
Run Code Online (Sandbox Code Playgroud)

不是我要找的:

function foobar() {
  // ...
}
$('#foo').click(function{
  foobar();
});
$('#bar').change(function{
  foobar();
});
Run Code Online (Sandbox Code Playgroud)

相关的HTML:

<select id="bar">
  <option>dummy1</option>
  <option>dummy2</option>
</select>
<button id="foo">foo</button>
Run Code Online (Sandbox Code Playgroud)

Thi*_*iff 5

如果您不想click打开#barchange打开,这是唯一的方法#foo:

$( '#foo, #bar' ).on( 'click change',  function ( event ) {
    if( ( event.type == 'click' && event.target.id == 'foo' )
        || ( event.type == 'change' && event.target.id == 'bar' ) ) {

        //process event here
    };
} );
Run Code Online (Sandbox Code Playgroud)

虽然我认为你列出的想要的方法是更好的方法.哪个更容易阅读和理解?:

function foobar() {
    // ...
};

$( '#foo' ).click( foobar );
$( '#bar' ).change( foobar );
Run Code Online (Sandbox Code Playgroud)