这似乎是一个简单的问题。我已经尝试过谷歌的答案,但我似乎无法找到答案,这就是我在这里寻求帮助的原因。部分问题在于我无法正确地表达问题,因此我将在此处尝试解释。这就是......
我的JavaScript文件中有两个函数(让我们将它们命名为fn1()
和fn2()
)。我在我的HTML文件中使用onclick
调用这些函数。例如:
<span class="test" onclick="fn1();">Button #1</span>
<span class="test" onclick="fn2();">Button #2</span>
当用户点击各自的按钮时,这些功能完美无缺。但是,如果用户单击Button#1,然后单击Button#2,则同时调用/加载这两个函数。
问题:如何在用户点击按钮#2时禁用(或清除)fn1()
,这将加载fn2()
?
谢谢。
答案 0 :(得分:2)
您可以使用jQuery方式noop method
在fn1()函数中你应该使用$ .noop()清空函数fn2()
或者就像你在onclick上调用它一样,你可以在该函数中删除该属性。 (我不建议使用它)
$('span.test').not($(this)).removeAttr('onclick');
但我非常建议您使用namespace解锁点击事件,而不是调用内联javascript:
$( "span.test" ).on( "click.something", function( event ) {
//do your stuff here
});
稍后您可以取消绑定点击事件,如下所示:
$("span.test").off("click.something");
答案 1 :(得分:0)
好方法:当您输入fn2
(而不是禁用该功能)时,禁用fn1
按钮。这也具有让用户知道该按钮不可用的副作用。禁用的元素不会触发“点击”事件。
$('span.test').not($(this)).prop('disable', true);
不那么好的方法:当你在一个函数中时设置一个变量,并在退出时清除它。如果设置了变量,则从函数中提前返回。
彻头彻尾的丑陋方式:如果单击其他按钮,则从其他按钮取消绑定。这太乱了,你真的不想这样做。
I-really-can-less-less-less方式:用no-ops重新定义其他函数。
答案 2 :(得分:0)
我不知道我是否理解你的问题,而且我没有足够的代表发表评论 但如果您希望用户在第一个按钮完成执行之前无法按下第二个按钮,那么您可以执行以下操作
document.getElementById("button1").disabled = true
但您应首先将ID button1
添加到第一个按钮
当用户按下按钮
时,这将使按钮button1
变灰
代码完成执行后,您应该添加:
document.getElementById("button1").disabled = false
这将使按钮再次按下
答案 3 :(得分:0)
你可以尝试使用标志,这不会清除函数,例如:
var runFn1 = true;
function fn1() {
if (!runFn1) {
return;
}
// ur code here
}
function fn2() {
runFn1 = false;
// ur code here
}
答案 4 :(得分:0)
&#34;当用户点击各自的按钮时,这些功能完美无缺。但是,如果用户单击按钮#1,然后单击按钮#2 - 同时调用/加载这两个函数。&#34;
javascript是单线程的。 fn1()执行首先完成,然后是fn2()。希望你明白不会同时调用两者。
例如
function fn1(){
while(true){
}
}
function fn2(){
alert("2");
}
<input type="button" value="Btn1" onClick="fn1();"/>
<input type="button" value="Btn2" onClick="fn2();"/>
尝试调用fn1()。你会惊讶fn2()不能被调用!