Javascript 为什么我的更改复选框不起作用(AJAX)

Javascript 为什么我的更改复选框不起作用(AJAX),javascript,ajax,asp.net-mvc,razor,Javascript,Ajax,Asp.net Mvc,Razor,这就是我的razor代码的样子 <form asp-action="Save" asp-controller="ClassesHeld" method="post"> <input asp-for="ClassHeldId" value="@Model.ClassHeldId" hidden /> <div class="form-group"> <label>Student</label>

这就是我的razor代码的样子

<form asp-action="Save" asp-controller="ClassesHeld" method="post">
    <input asp-for="ClassHeldId" value="@Model.ClassHeldId" hidden />
    <div class="form-group">
        <label>Student</label>
        <input asp-for="@Model.Student" value="@Model.Student" class="form-control" readonly />
    </div>

    <div class="form-group">
        <label>Grade</label>
        <input id="Grade"asp-for="Grade" type="number" value="@Model.Grade" class="form-control" min="0" max="5" />
    </div>

    <div class="form-group">
        <label>Attendance</label>
        <input id="Attendance" class="form-check-input" asp-for="Attendance" type="checkbox"/>
    </div>

    <button class="btn btn-primary" type="submit" value="Save">Save</button>
</form>

<script>
    $("#Attendance").on("change", function () {
        $("#Grade").attr("disabled", this.checked);
    });
</script>
这两个都不起作用

我甚至从这里复制了一些解决方案(其中一个是最后一个带有document.getElementbyId的简单纸条,但都不起作用。我必须错过一些简单的东西,但我在过去的一个小时里一直在看这个问题,我仍然无法理解

我很抱歉,如果问题是愚蠢的,或者是低级的,但我已经绝望了

编辑:只需添加更多信息,此表单在提交数据时运行良好,controller将内容保存到数据库中…一切正常,只是在学生未参加的情况下无法编辑成绩的部分除外


因此,目标是在选中“考勤”复选框时禁用输入字段

我认为您实际上需要在不需要时删除禁用属性。也许可以尝试以下操作:

$(document).ready(function() {
    $("#Attendance").on("change", function () {
        if (this.checked) {
               $("#Grade").attr("disabled", true);
        } else {
               $("#Grade").removeAttr("disabled");
        }
    });
});

我认为当您不需要禁用属性时,实际上需要将其删除。也许可以尝试以下方法:

$(document).ready(function() {
    $("#Attendance").on("change", function () {
        if (this.checked) {
               $("#Grade").attr("disabled", true);
        } else {
               $("#Grade").removeAttr("disabled");
        }
    });
});
.attr()方法仅管理字符串;因此,如果要更改属性,例如禁用属性,或者甚至使用布尔值或其他内容进行检查,则必须使用prop方法

有关更多信息,请查看此帖子:

您可以执行下面的代码段

$(“#出席”)。关于(“更改”,函数(){
$(“#等级”).prop(“已禁用”,此项已选中)
});

大学生
等级
出席
拯救
.attr()方法仅管理字符串;因此,如果您想更改属性,如禁用属性,甚至使用布尔值或其他内容进行检查,则必须使用prop方法

有关更多信息,请查看此帖子:

您可以执行下面的代码段

$(“#出席”)。关于(“更改”,函数(){
$(“#等级”).prop(“已禁用”,此项已选中)
});

大学生
等级
出席
拯救


能否在if(此项已选中)之前添加一个console.log('test'),可能事件没有连接上你是对的,我只是这样做了,它什么也没做。但是为什么它没有被调用?我不认为这是问题所在,因为javascript在dom之后,但可能只是在你的示例中。试着用jquery ready函数包装这段代码。我会更新我的答案另一个需要查找的东西,是吗控制台中有任何错误吗?F12.如果有语法错误,javascript只会放弃:)没有错误,即使代码有微小的更改,也不会有任何效果。能否在If(this.checked)之前添加一个console.log('test'),可能事件没有连接到。你是正确的,我只是这样做了,它什么也没做。但是为什么它没有被调用呢?我认为这不是问题所在,因为javascript在dom之后,但这可能只是在您的示例中。尝试使用jqueryready函数包装此代码。我会更新我的答案。还有一件事要找,控制台有错误吗?F12。如果有语法错误,javascript就会放弃:)没有错误,即使代码有一点变化,也不会有任何效果。代码段可以工作吗?当您单击运行代码片段时,对我来说它是有效的。您的控制台上有一些日志吗?在继续之前检查此项:1。jquery库脚本在主脚本之前加载。脚本2。在主脚本中,执行$(document).ready(函数(){###自定义函数##})。它将确保加载dom。您的代码段工作正常。这是我这边的事,只是不想起作用。我已尝试添加console.log并再次。。。没有什么这是我目前的代码看起来很酷的样子,我只是复制粘贴你的代码,它在我这边工作得很好。您是否尝试更改浏览器?(适用于边缘、FF、镀铬)。你确定你的scipt已经加载(在你的ready函数中键入console.log(“test”)。有时一些浏览器会将js保存在缓存中,因此你必须在页面上强制重新加载以跟踪js的更改。(ff和chrome上的CTRL+F5)如果你在ios上使用safari,你必须关闭标签并重新打开它。在使用了很长时间之后……出于某种原因,将ID更改为除上述内容以外的任何内容都可以使其正常工作。显然没有重复项,所以我不知道为什么会发生这种情况。很好,你已经设法解决了问题,浏览器有时会有点反复无常很多时候,如果你确定没有重复的ID,我看不到很多关于你问题的线索。关于复制ID时的信息,JS将检索第一个ID并将事件应用到它。我已经遇到了广告拦截器的问题,如果ID看起来像潜在的广告,广告拦截器可以阻止与此项目相关的任何脚本。代码段有效吗?当您单击运行代码段时,对我来说它有效。您的控制台上有一些日志吗?在继续之前请检查:1.jquery库脚本在main.script之前加载。2.在主脚本中Do$(document.ready(function(){###您的自定义函数###})。它将确保加载dom。您的代码段工作正常。这是我这边的问题,它只是不想工作。我已尝试添加console.log,但再次尝试…无…以下是我当前代码的外观。很酷,我只是复制粘贴您的代码。它在我这边工作正常。您是否尝试更改浏览器?(适用于Edge、FF、Chrome)。你确定你的scipt已加载(在ready函数中键入console.log(“test”)。有时某些浏览器会缓存js,因此你必须在页面上强制重新加载以跟踪js的更改。(FF和Chrome上的CTRL+F5)如果你在ios上使用safari,你必须关闭标签并重新打开它。在使用它很长时间后…出于某种原因,将ID更改为除上述内容以外的任何内容都可以使其正常工作。显然没有重复项,所以我不这么认为