Javascript 如何在if语句中使用多个元素、多个事件和相同的函数
假设我有: 如果(事件X发生在元素A上) 执行代码R 如果(事件Y发生在元素B上) 执行代码R 在jQuery中,如何使用1 if语句代替2 if语句,从而: 如果(事件X发生在元素A上)或(事件Y发生在元素B上) 执行代码RJavascript 如何在if语句中使用多个元素、多个事件和相同的函数,javascript,jquery,Javascript,Jquery,假设我有: 如果(事件X发生在元素A上) 执行代码R 如果(事件Y发生在元素B上) 执行代码R 在jQuery中,如何使用1 if语句代替2 if语句,从而: 如果(事件X发生在元素A上)或(事件Y发生在元素B上) 执行代码R 我一直在研究bind方法,但还没有找到解决方案。这就像谷歌的搜索功能:如果你点击“搜索”按钮,它就会执行搜索。但是,如果您在输入框中键入内容并按“回车”键,它也会执行搜索。同样,两个不同的元素(按钮和输入框)、两个不同的事件(鼠标单击和按键),但功能相同(搜索)?如果最终
我一直在研究bind方法,但还没有找到解决方案。这就像谷歌的搜索功能:如果你点击“搜索”按钮,它就会执行搜索。但是,如果您在输入框中键入内容并按“回车”键,它也会执行搜索。同样,两个不同的元素(按钮和输入框)、两个不同的事件(鼠标单击和按键),但功能相同(搜索)?如果最终代码中有
语句,则不会有任何。必须将每个事件的事件处理程序绑定到每个元素,事件处理程序当然可以是相同的函数:
function event_handler() {
// ...
}
$(elementA).on('eventX', event_handler);
$(elementB).on('eventY', event_handler);
我建议您阅读jQuery教程:
要了解有关一般事件处理的更多信息,请参阅以下文章: 在最终代码中不会有任何if
语句。必须将每个事件的事件处理程序绑定到每个元素,事件处理程序当然可以是相同的函数:
function event_handler() {
// ...
}
$(elementA).on('eventX', event_handler);
$(elementB).on('eventY', event_handler);
我建议您阅读jQuery教程:
要了解有关一般事件处理的更多信息,请参阅以下文章: 您需要将相同的函数添加到两个事件/元素组合中:
$('#elementA').on('click', myEventHandler);
// You can specify multiple Events:
$('#elementB').on('mousedown mouseup blur', myEventHandler);
// Or specify multiple elements:
$('#elementB, #elementC').on('click', myEventHandler);
function myEventHandler(e){
console.log(e.type); // Event type ('mousedown', 'mouseup' etc)
console.log(this); // The element that triggered the event.
// Do stuff.
}
但是您不能将单击
绑定到'elementA'
并将鼠标向下
绑定到'elementB'
的1行中
因此,不,没有“一行”jQuery函数将多个不同的事件绑定到不同的元素
基本上,您需要将相同的函数添加到两个事件/元素组合中:
$('#elementA').on('click', myEventHandler);
// You can specify multiple Events:
$('#elementB').on('mousedown mouseup blur', myEventHandler);
// Or specify multiple elements:
$('#elementB, #elementC').on('click', myEventHandler);
function myEventHandler(e){
console.log(e.type); // Event type ('mousedown', 'mouseup' etc)
console.log(this); // The element that triggered the event.
// Do stuff.
}
但是您不能将单击
绑定到'elementA'
并将鼠标向下
绑定到'elementB'
的1行中
因此,不,没有“一行”jQuery函数将多个不同的事件绑定到不同的元素
基本上,您可以使用多个用逗号分隔的jQuery选择器(如CSS选择器)。生成的jQuery对象列表将包含所有这些对象
如果使用.bind()
或.on()
并将第一个参数设置为以空格分隔的事件名称列表,则允许在jQuery中绑定多个事件
function handler_function (e) {
e.target // contains the element that triggered the event (which was clicked for ex.)
e.type // contains the event type that triggered the event
e.keyCode // contains a number representing the key that has been pressed (if any)
}
$('button#button_id, input[type=text]#input_box')
.bind('keyup click hover touch drag drop', handler_function);
可以使用多个用逗号分隔的jQuery选择器(如CSS选择器)。生成的jQuery对象列表将包含所有这些对象
如果使用.bind()
或.on()
并将第一个参数设置为以空格分隔的事件名称列表,则允许在jQuery中绑定多个事件
function handler_function (e) {
e.target // contains the element that triggered the event (which was clicked for ex.)
e.type // contains the event type that triggered the event
e.keyCode // contains a number representing the key that has been pressed (if any)
}
$('button#button_id, input[type=text]#input_box')
.bind('keyup click hover touch drag drop', handler_function);
你为什么这么说$(“#selector1,#selector2”)
选择这两个元素,并.bind('event1 event2',handler)
将处理程序绑定到这两个事件。@MihaiStancu:添加了一些澄清OK,这更有意义,实际上没有一个行程序像这样。您可以使用我提供的代码并添加一些逻辑(if
/开关
)来检查创建事件的对象类型(e.target
)和事件类型(e.type
),并决定要做什么。您为什么这么说$(“#selector1,#selector2”)
选择这两个元素,并.bind('event1 event2',handler)
将处理程序绑定到这两个事件。@MihaiStancu:添加了一些澄清OK,这更有意义,实际上没有一个行程序像这样。您可以使用我提供的代码并添加一些逻辑(if
/switch
)来检查创建事件的对象类型(e.target
)和事件类型(e.type
),并决定要做什么。哦,在jQuery的事件处理程序中,您应该能够使用this
,而不是e.target
。是的,但是研究事件
对象很重要,所以我会更频繁地提升它。@Cerbrus是否有任何情况下此
可能不会附加到任何对象上?或者可以非直观地附加?我想mousemove
事件会将其附加到body
对象。我通常使用原生JS,因此,恐怕没有线索。编辑:实际上:$(“#answer-14140858”).on('mousemove',function(){console.log(this)})
记录您的答案,而不是主体
对象。哦,在jQuery的事件处理程序中,您应该能够使用this
而不是e.target
。是的,但是研究事件
对象很重要,所以我会更频繁地提升它。@Cerbrus是否有任何情况下此
可能不会附加到任何对象上?或者可以非直观地附加?我想mousemove
事件会将其附加到body
对象。我通常使用原生JS,因此,恐怕没有线索。编辑:实际上:$(“#answer-14140858”).on('mousemove',function(){console.log(this)})
记录您的答案,而不是主体
对象。