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的前一个状态,尝试更改事件,以及