【问题标题】:Appending to a dropdown list in Jade using Ajax使用 Ajax 附加到 Jade 中的下拉列表
【发布时间】:2016-05-25 13:57:54
【问题描述】:

我正在尝试将条目添加到我在 .jade 文件中定义的下拉列表中,如下所示。

extends layout

block content
    script(src='http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js')
    script(src='/javascripts/addsystem.js')
    h1= title
    p Testing


    select#allSystems

我的 Ajax 方法如下所示:

var select = $('#allSystems');
console.log("Runing script")


$.ajax({
  url: '/submit/getAllSystems',
  dataType:'JSON',
  success:function(data){

    $.each(test.system, function(key, val) {
        select.append('<option id="' + val.id + '">' + val.name + '</option>'); 
    })
  }
});

Ajax 脚本位于 Jade 文件中包含的 JS 文件中。 (Jquery 也包含在 Jade 文件中)。

一切似乎都工作正常,除了追加。 IE。控制台日志一直显示良好的数据,当在 Ajax 脚本中打印选择对象时,浏览器将其识别为 HTML 元素。

打印正在运行的“console.log(select);”时,Firefox 控制台显示如下:

Object { context: HTMLDocument → submit, selector: "#allSystems" }

知道我做错了什么吗?

【问题讨论】:

  • 您可以同时发布您的 Jade 文件或渲染的 HTML 吗?
  • 你是否在 DOM 准备好之前运行$('#allSystems')
  • 这就是我要添加到我的答案中的内容。
  • 迈克和保罗。我不知道。我该如何检查?我什至不知道我是否正在准备 DOM。

标签: javascript jquery pug


【解决方案1】:

Jade 是一种模板语言,必须使用数据编译和执行才能呈现 HTML。 JQuery 不会自动为您执行此操作,这就是您在 select.append 处注释掉的尝试失败的原因。

自己构建 HTML 是可行的(尽管它会产生一些难看的代码,而且我仍然不喜欢字符串连接)。但是,当您这样做时,您更改为.appendTo,它将尝试获取您的select 对象并将其附加到option,我认为这不是您想要的。

试一试:

select.append('<option id="' + val.id + '">' + val.name + '</option>');

如果这不起作用,那么你的选择器有一些东西可以让你得到select 变量。

* 编辑 * 我在您的 Jade 中注意到您在 DOM 的其余部分之前加载脚本。如果 addsystem.js 的内容如您所描述,那么您正在获取数据并尝试将其附加到尚不存在的 DOM 节点。尝试像这样包装它:

$(function(){ /** your code **/ })

这是 jQuery 在 DOM 完全加载后执行操作的方法的简写。

【讨论】:

  • 对不起,我包含了一个临时版本的代码,我只是在测试随机的东西,因为我认为正确的东西不起作用。我已经编辑了我的帖子,当前版本似乎与您的建议相符,除非我遗漏了什么。
  • 我还将包含一些有关选择器的信息,因为这可能是您建议的问题。我会尽快修改问题。
  • 不,您显示的内容看起来不错。假设从您的评论中测试对象具有 system 属性,它是对象的集合,那么循环应该可以工作。 ajax 调用执行后,您在 DOM 中看到了什么?您是否收到格式错误的选项标签、空白标签,什么也没有?控制台有错误吗?
  • 在您的控制台中,尝试使用您正在尝试的语法。例如,输入$('#allSystems').append('&lt;option id="2323234234243"&gt;Test Option&lt;/option&gt;') 并回车,然后观察它是否更新了你的DOM。如果不是,那么 #allSystems 不是正确的 ID。如果是这样,那么很有可能您的数据结构与您的预期不符,而您没有注意到。
  • 我刚刚将脚本包含移动到块内容的底部,正如您在编辑答案中所建议的那样。昨天我对 DOM 的东西感到困惑,因为我是网络编程的新手,所以不知道它是什么。然而,今天以新的眼光看待它,这一切都是有道理的。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-21
  • 1970-01-01
  • 2018-08-06
相关资源
最近更新 更多