Events Javascript触发两个事件——onkeypress和onclick
问题是,当我在单选按钮上按一个键时,元素MyFunc会触发两次——一次用于“onkeypress”事件,另一次用于“click”事件 问题“为什么?”我需要用两种不同的方式来处理这个问题,但现在我无法识别最初的事件是什么。当我点击鼠标时,它只为“点击”事件而触发Events Javascript触发两个事件——onkeypress和onclick,events,javascript-events,onclick,onkeypress,Events,Javascript Events,Onclick,Onkeypress,问题是,当我在单选按钮上按一个键时,元素MyFunc会触发两次——一次用于“onkeypress”事件,另一次用于“click”事件 问题“为什么?”我需要用两种不同的方式来处理这个问题,但现在我无法识别最初的事件是什么。当我点击鼠标时,它只为“点击”事件而触发 专题1 专题2 函数MyFunc(e,obj){ 警报(e.type);//警报“按键”然后“单击” //做我的事 } 谢谢你的帮助 您可以在函数中添加第三个参数 function MyFunc(e, obj, click)
-
专题1
专题2
函数MyFunc(e,obj){
警报(e.type);//警报“按键”然后“单击”
//做我的事
}
谢谢你的帮助 您可以在函数中添加第三个参数
function MyFunc(e, obj, click) {
if (click) { } // do stuff
else { } // do other stuff
}
现在为你的活动添加一个bool
<input type="radio" onkeypress="MyFunc(event, this, false)" onclick="MyFunc(event, this, true)" name="myList" id="MyId_1" />Topic 1
<input type="radio" onkeypress="MyFunc(event, this, false)" onclick="MyFunc(event, this, true)" name="myList" id="MyId_2" />Topic 2
主题1
专题2
选中单选按钮时,将触发onclick
事件。因为您是通过按键选择的,所以这两个事件都将被触发。首先是onkeypress
事件,然后是onclick
事件。在JavaScript中使用onMouseDown而不是onclick,为了保持一致性,在此处也添加onkeypress事件-将事件从HTML标记中删除
Sudo代码:
var myRadioButton = document.getElementById('radio');
myRadioButton.addListener("radioClick",onMouseDown);
myRadioButton.addListener("radioKey",onKeyPress);
radioClick()
{
//code to do stuff
}
查看jQuery:了解编写JavaScript的实际代码和简单方法。我将创建两个单独的处理程序:一个用于单击事件,另一个用于按键 然后,处理程序可以从事件中提取所需的任何内容,并调用具有公共逻辑的第三个函数
您的onkeypress必须忽略空格的事件并输入键。我不明白你为什么要听按键事件。你能详细说明一下吗?如果你解释一下你将要做什么,也许我们会更有帮助。这是可以做到的,而不必求助于总是笨重而缓慢的框架。诀窍是记录在什么时间点发生的事件,然后在此基础上在一个时间范围内工作。当您触发
按键
事件时,点击
事件随后立即触发,下面列出了按键
事件之后触发点击
事件的速度
铬合金39.0:0毫秒
Firefox 31.0 ESR:18~20ms
IE 11:2~4ms
歌剧12.1:0毫秒
Chrome和(real)Opera不必等待,IE速度相当快,可以说Firefox需要时间;可以使用的范围(至少在我的系统上)是0~20毫秒。以编程方式,我将为仍在使用垃圾计算机的人设置50毫秒的限制,因为他们在后台忙于处理150个无用的进程
注意,您必须使用窗口
全局级别的事件,尽管这似乎在我提到的所有浏览器中都能可靠地工作
var option = new function() {this.name = '';}
window.onclick = function(event)
{
option.clickDate = new Date().getTime();
}
window.onkeypress = function(event)
{
option.keyCode = event.keyCode;
option.keyCodeDate = new Date().getTime();
}
function MyFunc(e,obj)
{
if (option.keyCodeDate && option.clickDate &&
(
(option.clickDate - option.keyCodeDate)>=0 &&
(option.clickDate - option.keyCodeDate)<51)
{alert('keypress event');}
else {alert('click event');}
}
var option=new function(){this.name='';}
window.onclick=函数(事件)
{
option.clickDate=新日期().getTime();
}
window.onkeypress=功能(事件)
{
option.keyCode=event.keyCode;
option.keyCodeDate=新日期().getTime();
}
函数MyFunc(e,obj)
{
如果(option.keyCodeDate&&option.clickDate&&
(
(option.clickDate-option.keyCodeDate)>=0&&
(option.clickDate-option.keyCodeDate)如果在按键过程中触发了两个事件,则在onClick
函数中选中event.detail
属性。
如果event.detail=0
,则表示鼠标未单击该元素,我们可以忽略它。
按键事件是仅键盘用户激活按钮的事件,但如果您使用的是按钮,则“单击”应该是唯一需要的事件,因为它在按空格键时被触发。如果自定义控件上有事件,“按键”事件和“单击”既可以使用,也不会同时触发。但如何防止这种情况发生?据我所知,你无法阻止这种行为。这很奇怪。一起处理这些事件有什么意义?:-/我会试试。我想我试过使用MouseDown,但我像OnClick一样工作。也许addListener会有帮助。很快会有结果。我已经使用jQuery尝试此解决方案。它没有帮助。“OnMouseDown”没有激发任何东西。它只是没有调用我的函数。如果我使用“OnClick”对于addListener,它给出了同样的问题。我现在没有任何解决方案。有什么想法吗?很好,你提到了一致性,但后来你建议了一个框架,把它搞砸了。如果我通过谷歌搜索这个问题,这个页面就不会出现,因为我-jquery是为了找到答案,而不是把带宽浪费在用户身上。请坚持使用真正的Java问题是它们同时启动。我可以使用e.type属性识别单击的内容。它返回“keypress”或“click”。
var option = new function() {this.name = '';}
window.onclick = function(event)
{
option.clickDate = new Date().getTime();
}
window.onkeypress = function(event)
{
option.keyCode = event.keyCode;
option.keyCodeDate = new Date().getTime();
}
function MyFunc(e,obj)
{
if (option.keyCodeDate && option.clickDate &&
(
(option.clickDate - option.keyCodeDate)>=0 &&
(option.clickDate - option.keyCodeDate)<51)
{alert('keypress event');}
else {alert('click event');}
}