【问题标题】:Populate text box using values of two dropdown使用两个下拉列表的值填充文本框
【发布时间】:2015-03-30 09:24:10
【问题描述】:

我想用预定义的值填充文本框。此文本框是只读的。用户可以从 2 个相互依赖的下拉框中进行选择。所有这些都是引导项目中表单的一部分。

借鉴this, 我可以通过选择第一个来填充第二个下拉列表。但是,不能结合两者的功能并将它们链接到文本框。

代码:

<select id="cat">
<option val="Laptops">Laptops</option>
<option val="Phones">Phones</option>
<option val="Tablets">Tablets</option>
<option val="PC">PC</option>
</select>
<select id="item"></select>
<input id='price' type='text' readonly/>

javascript:

Laptops=new Array("HP","Dell","Apple","Lenovo");
Phones=new Array('Samsung','Nokia','iPhone');
Tablets=new Array('Apple','Lenovo','Asus','Acer','HP');
PC=new Array('IBM','Macintosh','Dell');

populateSelect();

$(function() {

  $('#cat').change(function(){
    populateSelect();
  });
});

function populateSelect(){
cat=$('#cat').val();
$('#item').html('');
  eval(cat).forEach(function(t) { 
        $('#item').append('<option>'+t+'</option>');
    });
}

我在下拉列表 1 和 2 中分别有大约 5 个和 4 个值。目前没有使用数据库。

当用户从任何下拉列表中选择时,我们如何在文本框中添加价格?

【问题讨论】:

  • 您是说商品的价格取决于其类别吗?当然不是 - 商品的价格应该与商品的分类方式无关。
  • 嗨@Roamer-1888。价格不取决于类别。下拉列表仅用于深入了解产品数量并缩小选择范围。我认为这对用户来说很容易。如果您不相信,请分享。

标签: javascript jquery html twitter-bootstrap-3


【解决方案1】:

由于您想显示商品的价格,我在当前对象结构中看不到它。所以我稍微修改了对象结构。

与新数组相比,我更喜欢使用[] 来创建数组。

同样,我不喜欢使用eval,而是因为变量是全局可用的,它们是窗口对象的属性。所以你可以使用window[property] 来获取那个特定的数组。但相反,我更喜欢创建一个新对象并将所有属性附加到该对象。这样就可以避免污染全局命名空间。

Laptops=new Array({name : "HP", price : 200},{name : "Dell", price : 400},{name : "Apple", price : 400},{name : "Lenovo", price : 200});
Phones=new Array({name : "Samsung", price : 200},{name : "Nokia", price : 400},{name : "Apple", price : 400});
Tablets=new Array({name : "Apple", price : 200},{name : "Acer", price : 400},{name : "Lenovo", price : 400},{name : "Dell", price : 100});
PC=new Array({name : "Macnitosh", price : 200},{name : "Dell", price : 100});


$(function() {
function populateSelect(){
  var value = $("#cat").val();
  if(value) {
    console.log("value"+window[value]);
    $("#item").html("");
    $.each(window[value], function(index, val) {
      $("#item").append("<option value='"+val.price+"'>"+val.name+"</option>");
    });
  }
}
  $('#cat').change(function(){
    populateSelect();
  });
  populateSelect();

  $("body").on("change", "#item", function() {
    $("#price").val($(this).val());
  });
});

DEMO

【讨论】:

  • 嗨@mohamedrias 感谢您提供的出色解决方案。它就像一个魅力。如果不是太多要求,我可以再请求你的帮助。我面临2个小问题。 a) 页面加载时,会显示两个下拉列表中的第一个值。理想情况下,还应选择文本框中的相应价格。但这并没有发生。 b)文本框中的价格仅在第二个下拉列表更改时才会更改。当用户更改第一个下拉菜单时,文本框中的价格会显示为先前的组合。我们可以为这种行为添加“刷新”条件吗(请原谅我对 javascript 的外行知识)。
  • 您还需要为第一个选择绑定更改事件并调用 populateSelect() 方法。同样对于页面加载,在#item 元素中触发更改事件。
  • 嗨@mohamedrias,我对javscript 或Web 技术的了解几乎为零。我试图修补代码以尝试合并您的输入,但无济于事。您是否可以使用工作示例编辑代码?
猜你喜欢
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 2019-07-28
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
相关资源
最近更新 更多