【问题标题】:Why is my checkbox on change not working (AJAX)为什么我的更改复选框不起作用(AJAX)
【发布时间】:2019-03-19 15:49:32
【问题描述】:

这就是我的剃须刀代码的样子

<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('Attendance').onchange = function () {
    document.getElementById('Grade').disabled = this.checked;
}; 

这些都不起作用。

我什至从这里复制了一些解决方案(其中一个是最后一个带有 document.getElementbyId 的简单脚本,但没有一个有效。我必须遗漏一些简单的东西,但我过去一直在研究这个小时,我还是想不通。

如果问题是愚蠢的或菜鸟级别的,我深表歉意。但我越来越绝望了。

编辑:只需添加更多信息,此表单在提交数据时工作得非常好,控制器将内容保存到数据库中......一切正常,只是不是它禁用学生编辑成绩的能力的部分没有参加。

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

【问题讨论】:

    标签: javascript ajax asp.net-mvc razor


    【解决方案1】:

    .attr() 方法只管理字符串;所以如果你想改变一个属性,比如 disabled 甚至用布尔值或其他东西检查,你必须使用 prop 方法。

    有关更多信息,请查看此帖子: .prop() vs .attr()

    你可以执行下面的sn-p。

     $("#Attendance").on("change", function () {
            $("#Grade").prop("disabled", this.checked)
           
        });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <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>
       
    </script>

    【讨论】:

    • sn-p 工作吗?当您单击运行代码片段时,对我来说它可以工作。你的控制台上有一些日志吗?在继续之前检查一下: 1. jquery 库脚本在你的 main.js 之前加载。脚本 2. 在您的主脚本中执行 $(document).ready(function () { ## your custom functions ##})。它将确保加载 dom。
    • 您的代码 sn-p 工作正常。这是我这边的事情,它只是不想工作。我已经尝试添加 console.log 并再次...什么都没有...pastebin.com/DXZjrdMX 这是我当前代码的样子
    • 不酷,我只是复制粘贴你的代码,它在我这边工作正常。您是否尝试更改您的浏览器? (适用于 Edge、FF、Chrome)。您确定您的 scipt 已加载(在您的准备好的函数中输入 console.log("test")。有时某些浏览器会缓存 js,因此您必须在页面上强制重新加载以跟踪 js 的变化。(CTRL + F5 在 ff 和 chrome 上)如果你在 ios 上使用 safari,你必须杀死标签并重新打开它。
    • 经过很长时间的工作......由于某种原因,将 ID 更改为任何内容,但提到的那些使它工作。显然没有重复,所以我不知道为什么会这样。
    • 很高兴你设法解决了你的问题,浏览器有时会有点反复无常,如果你确定没有重复的 ID,我看不到很多关于你的问题的线索。有关 IDS 重复时的信息,JS 将检索第一个并将事件应用于它。我已经遇到了广告拦截器的问题,如果 ID 看起来像潜在广告,广告拦截器可以阻止与此项目关联的任何脚本。
    【解决方案2】:

    我认为您实际上需要在不需要时删除 disabled 属性。也许试试这个:

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

    【讨论】:

    • 你能在 if (this.checked) 之前添加一个 console.log('test'),也许事件没有被连接起来
    • 你是对的,我只是这样做了,但它什么也没做。但是为什么没有被调用呢?
    • 我不认为这是问题所在,因为 javascript 在 dom 之后,但也许这只是在您的示例中。尝试使用 jquery 就绪函数包装此代码。我会更新我的答案
    • 另外要查找的是,控制台中是否有任何错误? F12。如果有语法错误,javascript 就会放弃 :)
    • 没有错误,即使对代码进行了微小的更改,也没有任何效果。
    猜你喜欢
    • 1970-01-01
    • 2016-01-14
    • 2021-03-06
    • 2012-07-25
    • 1970-01-01
    • 2015-04-11
    • 2011-10-31
    • 1970-01-01
    • 2017-08-15
    相关资源
    最近更新 更多