我想要两个:
<input onchange='fncChkVrification()'>
<button onmouseup='fncChkVrification()'>Hit Enter after pasting or typing the Code. Or Click Here.</button>
为了便于使用,我希望用户能够在填写输入文本框后按Enter键,并运行代码。问题是,用户可能需要稍后返回该输入字段,并重新运行具有相同值的代码。
代码仅在值更改时运行。我假设浏览器记录并跟踪该值以及它是否已被更改。
我可以:
onchange
事件。我想为用户提供两个选项。我已经读过JavaScript不能同时运行两个函数,但是如果代码非常短并且运行得非常快,它会运行两次,不是同时运行,而是立即运行?
如果由于某种原因代码第二次运行,它可能根本不会影响结果,但我希望避免不必要的重复。
代码 DOES 运行两次!如果单击该按钮,则会触发两个事件。来自按钮的onmouseup
,输入字段中的和 onchange
。
window.countTimesRun = 0;
window.fncChkVrification = function() {
console.log('fncChkVrification ran: ');
countTimesRun = countTimesRun + 1;
console.log('countTimesRun: ' + countTimesRun);
var getVrfyChkCode = document.getElementById('divForOnHoldKey').value;
google.script.run.withFailureHandler(onFailure)
.withSuccessHandler(rtrnFromVerify)
.verifyCode(getVrfyChkCode);
};
从技术上讲,JavaScript可能不会同时运行,但代码非常短,而且速度很快,可以连续运行两次。
我可以以某种方式暂停,跟踪或保留计时器。但这似乎有点过分以使其值得。我可能只需要一个按钮,而不是onchange
个事件。除非有人有简单的解决方案。我没有使用jQuery。
如果JavaScript的输入字段有onexit
事件,那么可能会解决问题。但据我所知,这并不存在。
我认为将onmouseup
按钮更改为onclick
可能会有所作为,但这并不起作用。
我只是尝试使用&#39; onblur`并且创造了许多非常不受欢迎的情况。当字段失去焦点时代码运行,但随后光标停留在输入字段中。因此,如果我点击新的浏览器选项卡,它会陷入循环。代码将运行,新的浏览器选项卡将无法加载,然后焦点会重新回到同一个地方!
我尝试使用按钮获得焦点,但是当我按Enter键时,光标不会移动到下一个标签元素。如果我单击Tab,按钮将获得焦点,代码将运行。但如果我点击Enter,则没有任何反应。
我已经意识到,我的问题的解决方案是控制当用户点击Enter键时会发生什么。因此,从某种意义上说,当按下Enter键时,这是一个重复的问题。在我发布这篇文章的时候,我没有意识到这一点。
我找到了解决方案。解决方案的关键是他们keyCode
检查。这是一个有效的jsFiddle:Run Code on Either Enter Key Press, or Button Click, but not Both
答案 0 :(得分:1)
听起来你已经陷入困境了。如果我已经正确地理解了这个小提琴你正在描述的内容:http://jsfiddle.net/wR32h/
这是它的核心:
FormManager.prototype.initialize = function () {
this.elements.input.onkeyup = this.handleInputKeyup.bind(this);
this.elements.button.onclick = this.handleButtonClick.bind(this);
};
FormManager.prototype.handleInputKeyup = function (evt) {
// check to see if the key was enter
if (evt.keyCode !== 13) {
return;
}
if (this.checkState()) {
this.validateCode();
} else {
alert('you need to log in before validation can take place');
}
};
FormManager.prototype.handleButtonClick = function (evt) {
if (this.checkState()) {
this.validateCode();
} else {
alert('you need to log in before validation can take place');
}
};
我们可以通过捕获onkeyup来消除由于模糊和更改事件而导致的任何问题,并且如果密钥未输入则简单地返回。
使用这种方法,您不应该触发多个事件......如果没有更多的代码,很难看出到底出了什么问题,但希望我已经正确理解并覆盖了您的问题。