使用从 django json 模式生成的 javascript 引用 HTML 标签

reference a HTML tag with javascript that was generated from django json schema

我正在尝试通过 javascript 引用由 django 的 django_jsonforms link JSON Schema link 生成的 HTML 标签来动态更新表单。例如,表单中的 2 个下拉列表,如果您在第一个下拉列表中创建 selection,则第二个下拉列表应该更新。我已经为我手动输入的 HTML selection 标签完成了此操作,但我正在尝试使其适用于 JSON 模式生成的 HTML。这是我尝试过的:

var project_selection = document.getElementsByName("form[project]")[0];

这没有用,我有点惊讶,因为我在检查页面时看到 select 标签有 name="form[project]"

当我尝试使用 name 的虚拟标签时,我得到了一个 NodeList,我可以使用 project_section[0] 访问它,但是当我尝试对生成的 select 标签做同样的事情时通过 django 的 json 模式,我得到它看起来像一个空列表,但标签在它下面(但我无法访问它)。见下图。

带名称的 h1 标签的虚拟测试

实际的 django 生成了带有名称的 select 标签(看起来是空的,但当我展开它时它不是,但是,我无法在其上索引 [0] 项)

我相信有人以前遇到过这个问题,所以我希望这是一个简单的答案。

归根结底,我知道我需要将以下内容与 JSON 模式结合使用来执行类似于 onchange 的操作,如 link[=32= 所示]

var element = document.getElementById('editor_holder');

var editor = new JSONEditor(element, options);

editor.on('change',function() {
  // Do something
});

感谢您提前查看!

参考文献:

不完全确定这个,但你正在使用 getElementsByClassName,与元素的class名称相关。不是名字。例如:

<div class="cname"></div>

这是一个 class 名称,表单元素有一个 name 属性,您可以通过 var project_selection = document.getElementsByName("form[project]");

终于弄清楚是什么导致了这个问题。 DOM 在执行脚本以调用

之前未完成呈现 JSON 架构表单

var project_selection = document.getElementsByName("form[project]");

因此将上述脚本包装在 jquery 就绪函数中解决了这个问题。

<script>
     $('document').ready(function(){
          var project_selection = document.getElementsByName("form[project]");
          console.log(project_selection);
          console.log(project_selection[0]);
     });
</script>

查看更多信息: