有没有一种方法可以将两个或多个执行类似操作的事件组合起来使用DRY原理
Is there a way to combine 2 or more events that do similar operations to use the DRY principle
我有两个事件,一个是按键,另一个是点击事件。事件做类似的事情,但它们不同(例如:它们搜索不同的元素,在我的真实代码中,它们根据输入的按钮和输入框调用diff函数(。我应该把这些事件合并起来吗?如果是,如何?
$(document).ready( function(){
function replaceQ(){
var num1 = Math.floor(Math.random() *10)
var num2 = Math.floor(Math.random() *10)
$(".container").children().remove()
$(".container").append("<div>" + num1 + " </div><div>" + num2 +"</div>")
.append("<input class='input'>").append("<button class = 'button'>Go</button>")
var result = num1 + num2;
return [result]
}
var outResult = replaceQ()[0]
$(".container").on("click", "button", function(){
var entry = $(this).siblings(".input").val()
if(outResult == entry){
outResult = replaceQ()[0]
}
})
$(".container").on("keypress", "input", function(e){
var entry = $(".input").val()
if(outResult == entry && e.which == 13){
outResult = replaceQ()[0]
}
})
var processAnswer = function processAnswer(e){
//if(e.target.className === "input")
}
$(".input, .button").on("click", processAnswer)
});
您可以在回调函数中获得Event.type
,请参阅下面的示例代码
var processAnswer = function processAnswer(e){
if(e.type == 'click'){
//code here
}
else if(e.type == 'keypress'){
//code here
}
}
$(".input, .button").on("click keypress", processAnswer)
是的-有。您可以使用如下绑定方法:
$(".container button").bind("click keypress", function(){
....
});
编辑
您可以按照以下检查按钮或容器是否被触发
$(".container button, .container input").bind("click keypress", function(event){
var target = $(event.target);
if(target.is('button'))
{
alert("button");
}
else if(target.is('input'))
{
alert("input");
}
});
例如,请看这把小提琴。
事件侦听器本身足够独立,因此只为处理程序创建一个函数可能更有意义。所以你的部分代码看起来是这样的:
//New Event Handling function
function eventHandler(e) {
var entry = $(".input").val()
if(outResult == entry && (!e.which || e.which == 13)){
outResult = replaceQ()[0]
}
}
$(".container").on("click", "button", eventHandler);
$(".container").on("keypress", "input", eventHandler);
我认为组合事件侦听器是没有意义的,因为它们正在侦听特定的元素,并且组合它们(如$(".container").on("click keypress", eventHandler);
(可能会变得奇怪,因为当您单击文本字段时会触发它。因此,我将集中精力组合上面的处理程序。
相关文章:
- toogleClass函数来切换元素类并在事件期间执行某些操作
- 禁用先前单击按钮时的单击事件操作
- reactJs redux:如何对用户事件调度操作并将操作与化简器和存储链接
- 如何在执行某个操作后自动触发回车键事件
- 在悬停事件中创建一次性操作
- 将单击事件附加到按钮或链接上的类,该按钮或链接会触发 AJAX 帖子,然后延迟并继续原始操作
- MVC 下拉列表更改事件未正确调用控制器中的操作
- 如何在Javascript事件上触发rails控制器操作
- 如何使用 JavaScript 操作 html 按钮元素的“onclick”事件
- 如何删除绑定到单击事件的任何jQuery操作
- 如何在jquery可丢弃事件中执行某些操作
- html+jquery(绑定onclick事件以执行onclick之前的操作)
- 处理Ember中操作中的事件绑定和回调
- 如何使用body onload事件操作HTML音频标记和JavaScript函数
- 仅针对左滑动/右滑动事件阻止默认操作
- 在javascript中阻止文档执行默认操作时,在单个元素中使用默认事件
- 重命名连接名称并添加 JSF 操作事件
- 如何在滑块操作事件之前获取滑块的值
- 创建DOM后的Jquery操作事件不起作用
- 在jquery中循环操作/事件