当前位置: 首页 > 知识库问答 >
问题:

“追加不添加选择值”选项下拉列表

颜志学
2023-03-14

我正在尝试添加选项到一个动态选择输入,依赖于在另一个选择下拉菜单中选择的值。

我已经设法在选择父级中的值时填充数据对象。所有的my触发器也会被执行,子select被禁用,它应该包含数据对象中的所有值,但是它没有填充任何选项。

JS(Coffeescript)代码段:

$ ->
  $("select[data-option-dependent=true]").each (i) ->
    observer_dom_id = $(this).attr("id")
    observed_dom_id = $(this).data("option-observed")
    url_mask = $(this).data("option-url")
    key_method = $(this).data("option-key-method")
    value_method = $(this).data("option-value-method")
    # prompt = if $(this).has("option[value=]").size() then $(this).find("option[value=]") else $("<option value=\"\">").text("Select a value")
    prompt = $("<option value=\"\">").text("Select a value")
    regexp = /:[0-9a-zA-Z_]+:/g
    observer = $("select#" + observer_dom_id)
    observed = $("#" + observed_dom_id)

    observer.attr "disabled", true  if not observer.val() and observed.size() > 1

    observed.on "change", ->
      observer.empty().append prompt

    if observed.val()
      url = url_mask.replace(regexp, observed.val())

      $.getJSON url, (data) ->
        $.each data, (i, object) ->
          observer.append $("<option>").attr("value", object[key_method]).text(object[value_method])
          observer.attr "disabled", false

最后一节特别重要,因为这是JSON数据对象应转换为新选项的地方。下面是在一种情况下响应的对象(根据Firebug):

{"rule_attributes":[{"id":25,"human_name":"Gender"},{"id":26,"human_name":"Age"}]}

在本例中,儿童下拉列表应该附加性别和年龄选项,但没有附加任何内容。

更新1

如果我用这行来代替:

observer.append $("<option>").attr("value", object[key_method]).text(object[value_method])

...用一个测试:

observer.append $("<option>New Option</option>")

将添加新的选项值。我注意到的一点是,它只添加一次,即使我在每个对象中有两个选项。这可能是JSON对象结构的问题吗?

更新2某些广泛的日志记录在控制台中提供了以下详细信息:

console.log(object)
->  [Object { id=25, human_name="Gender"}, Object { id=26, human_name="Age"}]
console.log(key_method)
-> id
console.log(value_method)
-> human_name
console.log(object[key_method])
-> undefined
console.log(object[value_method])
-> undefined

更新3

console.log(data)
-> Object { rule_attributes=[2]}

有什么想法吗?

共有1个答案

督冠玉
2023-03-14

将getJSON回调中的$.each调用更改为

$.each data, (i, object) -> 

$.each data.rule_attributes, (i, object) ->
 类似资料:
  • 我有一个从数据库中提取下拉选项的工厂: 然后,我将该数据应用于控制器中的下拉列表/选择: 下面是select标记的外观: 放入$scope的下拉列表数据。临床DDL如下所示: 从 DB 返回的用户数据如下所示: 在我的控制器中,我填充了下拉列表/选择,然后我获取了一个用户ID并将其提交给DB以获取用户信息。这些用户信息会返回。然后,我想根据DB返回的“DefaultLocationId”从先前填充

  • 问题内容: 我想使用css在html中的选择选项之间添加某种空间(填充,边距或其他)。我已经尝试使用类似的东西: 但是没有用。我已经读过,这是可以做到的,但在IE中不起作用。无论如何,即使它无法在IE中运行,我也希望它可以在其他浏览器中运行。 PS:当前正在使用Chrome 问题答案: 选择选项的样式非常有限,因为要在操作系统中的所有应用程序之间保持一致性和一致性,因此浏览器应限制某些基本元素的样

  • 我一直在尝试更改选择选项的样式。例如添加颜色和背景似乎可以使用下面的代码。但它不起作用,例如边距:20px,边框或任何东西。一直在尝试不同的东西和JS和JQueary,但我不能让它工作,所有的提示都是欢迎的!:) null null

  • 鉴于下面的剑道下拉列表,我想在optionLabel select上添加一个类,这样当ddl扩展时,我可以直观地区分什么是选项标签,什么是选项。理想情况下,这应该从完成,而且显然必须从js完成。我正在寻找一个奇特的解决方案,我真的不想遍历大部分DOM。 http://trykendoui.telerik.com/@vojtiik/uLEc

  • 问题内容: 我希望此javascript在id =“ mainSelect”的选择中创建12到100个选项,因为我不想手动创建所有选项标签。你能给我一些指导吗?谢谢 问题答案: 您可以通过一个简单的循环来实现: JS Perf比较了我和imeVidas的答案,是因为我认为他的表情比我的看起来更容易理解/直观,而且我想知道这将如何转化为实现。根据Chromium14/Ubuntu11.04的说法,其

  • 下列选项是根据在第一步选择的文件格式而有所不同。 包含列的标题 如果勾选了这个选项,字段名将会包含在导出的文件。 如果零,留空白 如果字段内容是 0,留空白。 追加 将记录追加至现有的文件。 遇到错误时继续 在导出进程中忽略遇到的错误。 在 XML 中使用属性格式 属性格式 <RECORDS> <RECORD OrderNo="1003" ItemNo="1" PartNo="1313" Qty=