Javascript 在满足特定条件时停止函数,在其他条件下再次启动函数
我有一个复选框(类似于开关按钮)来打开/关闭功能。当我打开它时,功能应该工作,当我关闭它时,功能应该不工作。Javascript 在满足特定条件时停止函数,在其他条件下再次启动函数,javascript,jquery,return,Javascript,Jquery,Return,我有一个复选框(类似于开关按钮)来打开/关闭功能。当我打开它时,功能应该工作,当我关闭它时,功能应该不工作。现在的问题是当我打开开关,运行功能并将其关闭时,功能仍在工作,并且没有停止。当开关关闭时,我需要停止该功能。我把我的问题看得太重了。 HTML结构: <label for="onoffswitch">Switch: </label> <input type="checkbox" name="onoffswitch" class="onoffswitch-che
现在的问题是当我打开开关,运行功能并将其关闭时,功能仍在工作,并且没有停止。当开关关闭时,我需要停止该功能。我把我的问题看得太重了。
HTML结构:
<label for="onoffswitch">Switch: </label>
<input type="checkbox" name="onoffswitch" class="onoffswitch-checkbox" id="mathswitch">
<br><br>
<textarea name="question1" id="question1" class="question_aptitude maths_editor"></textarea>
<br><br>
<div id="result"></div>
我在谷歌上搜索过停止一个函数,大多数都说使用了
return
,但这在我的情况下似乎不起作用。我修改了你的javascript,以获得我认为你想要的功能
主要问题是,每当编辑器处于焦点或myFunction运行时,您都会添加一个keyup事件,并且您还试图将chk变量记录在无法记录的范围内。我的修改改变了你希望它“打开或关闭一个功能”的核心方面,但我觉得它可以满足你的需要。如果你需要我解释什么,请随意评论
代码如下:
var isMaths = false;
$(function() {
$("#mathswitch").on('click', function(e) {
isMaths = $("#mathswitch").prop('checked');
e.stopImmediatePropagation();
})
$('.maths_editor').on('keyup', myfunction);
})
function myfunction(e) {
var key = e.keyCode;
if (isMaths) {
$("#result").text("Maths is ON!");
console.log("working!");
// Here is where you would call the function that's in an
// external file as you said in the comments on your question.
externalFileFunctionCall();
if (key == 77 && e.altKey) {
alert("Maths is turned ON");
e.stopImmediatePropagation();
return;
}
if (key == 90 && e.altKey) {
alert("Maths is turned ON");
e.stopImmediatePropagation();
return;
}
} else {
$("#result").text("Maths is OFF!");
if (key == 77 && e.altKey) {
alert("Maths is turned OFF");
e.stopImmediatePropagation();
return;
}
if (key == 90 && e.altKey) {
alert("Maths is turned OFF");
e.stopImmediatePropagation();
return;
}
}
}
我已经修改了您的javascript以获得我认为您想要的功能 主要问题是,每当编辑器处于焦点或myFunction运行时,您都会添加一个keyup事件,并且您还试图将chk变量记录在无法记录的范围内。我的修改改变了你希望它“打开或关闭一个功能”的核心方面,但我觉得它可以满足你的需要。如果你需要我解释什么,请随意评论 代码如下:
var isMaths = false;
$(function() {
$("#mathswitch").on('click', function(e) {
isMaths = $("#mathswitch").prop('checked');
e.stopImmediatePropagation();
})
$('.maths_editor').on('keyup', myfunction);
})
function myfunction(e) {
var key = e.keyCode;
if (isMaths) {
$("#result").text("Maths is ON!");
console.log("working!");
// Here is where you would call the function that's in an
// external file as you said in the comments on your question.
externalFileFunctionCall();
if (key == 77 && e.altKey) {
alert("Maths is turned ON");
e.stopImmediatePropagation();
return;
}
if (key == 90 && e.altKey) {
alert("Maths is turned ON");
e.stopImmediatePropagation();
return;
}
} else {
$("#result").text("Maths is OFF!");
if (key == 77 && e.altKey) {
alert("Maths is turned OFF");
e.stopImmediatePropagation();
return;
}
if (key == 90 && e.altKey) {
alert("Maths is turned OFF");
e.stopImmediatePropagation();
return;
}
}
}
您可以使用jQuery.off()删除keyup事件处理程序,并根据复选框在焦点上声明一个新的事件处理程序
$(函数(){
$(“.math_editor”).focus(函数(){
美元(本)。关闭(“键控”);
store_id=$(this.prop('id');
如果($(“#mathswitch”)。为(“:选中”))
{
myfunction();
}
其他的
{
$('#'+store_id).on('keyup',函数(e){
var key=e.keyCode;
if(key==77&&e.altKey)
{
警报(“数学已关闭”);
e、 停止即时复制();
返回;
}
if(key==90&&e.altKey)
{
警报(“数学已关闭”);
e、 停止即时复制();
返回;
}
});
}
});
});
函数myfunction(){
$('#'+store_id).on('keyup',函数(e){
var key=e.keyCode;
if(key==77&&e.altKey)
{
警报(“数学已打开”);
e、 停止即时复制();
返回;
}
if(key==90&&e.altKey)
{
警报(“数学已打开”);
e、 停止即时复制();
返回;
}
});
}
.case{
宽度:40%;
浮动:对;
边框:1px实心;
填充:0.5em;
文本对齐:居中;
}
案例
请使用控制台查看值
案例1:最初没有选中复选框并在文本框中键入内容,按Alt+M应该会发出警报“数学关闭”,但它没有这样做!!
案例2:看完案例1后,现在选中复选框并按texbox中的Alt+M。它可以正常工作。现在取消选中复选框并再次键入Alt+M。我仍然收到警报“Mathematics is ON”,但我希望它不会工作,因为IF语句现在为false!
开关:
您可以使用jQuery.off()删除keyup事件处理程序,并根据复选框在焦点上声明一个新的事件处理程序
$(函数(){
$(“.math_editor”).focus(函数(){
美元(本)。关闭(“键控”);
store_id=$(this.prop('id');
如果($(“#mathswitch”)。为(“:选中”))
{
myfunction();
}
其他的
{
$('#'+store_id).on('keyup',函数(e){
var key=e.keyCode;
if(key==77&&e.altKey)
{
警报(“数学已关闭”);
e、 停止即时复制();
返回;
}
if(key==90&&e.altKey)
{
警报(“数学已关闭”);
e、 停止即时复制();
返回;
}
});
}
});
});
函数myfunction(){
$('#'+store_id).on('keyup',函数(e){
var key=e.keyCode;
if(key==77&&e.altKey)
{
警报(“数学已打开”);
e、 停止即时复制();
返回;
}
if(key==90&&e.altKey)
{
警报(“数学已打开”);
e、 停止即时复制();
返回;
}
});
}
.case{
宽度:40%;
浮动:对;
边框:1px实心;
填充:0.5em;
文本对齐:居中;
}
案例
请使用控制台查看值
案例1:最初没有选中复选框并在文本框中键入内容,按Alt+M应该会发出警报“数学关闭”,但它没有这样做
案例2:完成案例1后,现在选中复选框并在文本框中按Alt+M。它很好用。现在取消选中复选框并再次键入Alt+m。我仍然收到“数学开启”的警告,但我希望它不会起作用,因为IF语句现在是假的!
开关:
这是我尝试的第一件事,但在这种情况下它对我不起作用:pwhy you use click on checkbox,它总是会给你以前的cb状态,try change event,check condition应该是$(“#mathswitch”)。是('checked')吗?那么,取消选中-你真正需要什么?@A.t.好的,我试试看that@TusharShukla你不能在myFunction()中检查一下吗?如果(cb.checked)-那么做,否则-不做。这是我尝试的第一件事,但在这种情况下对我不起作用:为什么你要使用点击复选框,它将始终给你cb的前一个状态,尝试更改事件,以及