2013-03-03 54 views
0

如何在同一个函数中组合$('#foo'),click()和$('#bar')。 #bar可能不会被点击触发,并且#foo不会被更改。将不同选择器的不同事件组合为一个函数

所以假设:

$('#foo').click() + $('#bar').change() (function{ 
    //... 
}); 

这是不是我在寻找:

function foobar() { 
    // ... 
} 
$('#foo').click(function{ 
    foobar(); 
}); 
$('#bar').change(function{ 
    foobar(); 
}); 

相关的HTML:

<select id="bar"> 
    <option>dummy1</option> 
    <option>dummy2</option> 
</select> 
<button id="foo">foo</button> 
+0

请出示相关的HTML。 – Ohgodwhy 2013-03-03 03:38:54

+0

@Ohgodwhy不需要在这个问题中的HTML – 2013-03-03 03:40:08

+0

你不能像这样加入两个选择器和两个事件,只是按照你这样做的方式来做! – adeneo 2013-03-03 03:44:56

回答

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

虽然我觉得你列为希望的方法是更好的方式来做到这一点。哪个更容易阅读和理解?:

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

$('#foo').click(foobar); 
$('#bar').change(foobar); 
+0

感谢您对此进行整理。 – tim 2013-03-03 03:55:00

0
$(":input").click(function(){ 
    alert($(this).attr('id')); 
    foobar(); //you can pass here the id as parameter to your function 
}) 

http://jsfiddle.net/5vgKm/

+0

OP提到他不想这样做。 – SRy 2013-03-03 03:56:26

相关问题