backbone.js 如何使javascript文件在mvc中工作后,页面加载到禁用复选框(与jquery)?

rur96b6h  于 2022-11-10  发布在  Java
关注(0)|答案(2)|浏览(122)

我刚开始做一个新的项目,我对javascript和web编程不是很有经验。
网站上有一个表单,上面有一些复选框。我的工作是用jquery编写一个javascript文件,如果其他复选框被选中,它应该会禁用一些复选框。复选框的ID、名称和其他信息来自一个数据库。所以在代码中没有直接用于复选框的变量。我使用复选框的ID来检查复选框是否被选中(这是正确的吗?).我想我已经有了正确的代码,因为它在浏览器的Web控制台上工作.

if ($("#id_865_gen").is(":checked")) {
    $("#id_866_gen").prop("disabled", true);
} else {
    $("#id_866_gen").prop("disabled", false);
}

我有一个index.html文件,其中包含javascript文件的所有源代码。(在body标记的底部)。我认为到目前为止这是有效的,因为如果我在js文件中做了一个警告,我会在页面加载之前得到一个警告。在包含js文件的时候,我还需要考虑什么呢?当然,我的代码必须实时工作。2所以如果一个复选框被选中,另一个复选框应该被禁用。3如果同一个复选框没有被选中,另一个复选框应该再次被启用。4我必须把代码放在一个函数中,然后在HTML文件中启动这个函数吗?
我不知道还有什么是重要的,但这个项目主要是用PHP,jquery, Backbone.js (MVC),模板库手柄,并使用 AJAX 。我从来没有用过ajax,但我必须在代码中包括一些ajax的东西,使其可用的现场?
我会非常感谢你的建议或想法。

更新日期:

我找到了解决我的问题的方法。我给checkox添加了onchange属性。每次checkox被选中或取消选中时,我的函数都会被触发。

bvuwiixz

bvuwiixz1#

当你从另一种语言开始使用javascript时,有很多东西需要学习,其中一个很大的调整就是管理你的代码何时执行。
一般来说,对于这样的事情,您希望代码运行:
1.一次是在页面准备好之后
1.每次输入改变时。
由于您要多次运行代码,因此将其放在方法中是有意义的

function updateBoxes() {
    if ($("#id_865_gen").is(":checked")) {
        $("#id_866_gen").prop("disabled", true);
    } else {
        $("#id_866_gen").prop("disabled", false);
    }
}

仅仅将这个函数放在脚本中并不能执行这个函数--你仍然需要让它在正确的时间执行。要在页面加载后执行它,根据应用程序的不同可能会有很大的不同。它可能像在脚本标签中添加updateBoxes()一样简单,但通常你需要等待某种渲染。在不了解你的应用程序的情况下,下面是一个很好的猜测:

$(function() {
    // this code will execute when jquery thinks your DOM is loaded
    updateBoxes(); // do the initial check

    $("#id_865_gen").change(updateBoxes); // this will run the check when your input changes value
});

其他问题

如果这不起作用,很可能是因为当你的代码运行时,DOM中还没有复选框。它们可能是由框架添加的。如果它们是由 Backbone.js 添加的,你可以四处寻找添加html的 Backbone.js render方法。然后你需要在渲染后执行updateBoxes
您用来查找输入的jquery选择器看起来可能会更改。使用name属性查找输入可能会更安全,也可能使用class或其他方法。例如:

$("input[name='blahblah']")

将选择输入X1 M5 N1 X而不使用任何ID。

tsm1rwdh

tsm1rwdh2#

你应该把你的代码放进去

$( document ).ready(function() {
    // your code
});

只有当页面文档对象模型(DOM)准备就绪时,代码才会执行
参考:https://learn.jquery.com/using-jquery-core/document-ready/

相关问题