Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于select创建javascript对象_Javascript_Html - Fatal编程技术网

基于select创建javascript对象

基于select创建javascript对象,javascript,html,Javascript,Html,我的html中有一个带有多个值的标记。 我还有一个javascript中的构造函数。 我试图解决的问题是基于所选值创建js对象。现在我有一个if语句的解决方案,它使用基于select值的参数调用构造函数。当select中没有太多值时,它可以正常工作。但如果有很多价值观,这种方式似乎效率极低。没有if语句,有没有更有效的方法来实现这一点 这是一把小提琴: 一种解决方案是预填充HTML,您可以使用自定义属性填充选择选项,并在JS中选择它们,如下所示: 函数createHumanObj(e){ v

我的html中有一个带有多个值的
标记。 我还有一个javascript中的构造函数。 我试图解决的问题是基于所选值创建js对象。现在我有一个if语句的解决方案,它使用基于select值的参数调用构造函数。当select中没有太多值时,它可以正常工作。但如果有很多价值观,这种方式似乎效率极低。没有if语句,有没有更有效的方法来实现这一点

这是一把小提琴:


一种解决方案是预填充HTML,您可以使用自定义属性填充选择选项,并在JS中选择它们,如下所示:

函数createHumanObj(e){
var e=document.getElementById(“mySelect”),
已选=e.options[e.selectedIndex],
firstname=selected.value,
lastname=selected.getAttribute(“数据lastname”);
var currentHuman=新人类(名字,姓氏,28);
回归人性;
}

在需要从一系列离散值中选择一个值的情况下,我使用switch语句。对于您的示例,我会将其用于“createHumanObj”函数:

function createHumanObj(e){
  var selectedHuman = e.options[e.selectedIndex].value;

  switch(selectedHuman) {
    case 'John':
      return new Human('John', 'Dalton', 28)

    case 'Tony':
      return new Human('Anthony', 'Stark', 50)

    default:
      console.log('Unknown human')
  }
}

与其在选择对象时创建对象,因为它们总是相同的(我想是吧?),为什么不将它们存储在“地图”中呢?像这样:

var exampleJson='{“约翰”:{“姓氏”:“约翰”,“名”:“道尔顿”,“年龄”:28},“托尼”:{“姓氏”:“安东尼”,“名”:“斯塔克”,“年龄”:50}”;
//例如,json可以来自Web服务
var humans=JSON.parse(exampleJson);
函数createHumanObj(){
var e=document.getElementById(“mySelect”);
var selectedHuman=e.options[e.selectedIndex].value;
返回人类[selectedHuman];
}
函数showHumanProps(){
var log=document.getElementById(“日志”);
var currentHuman=createHumanObj();
log.innerHTML=currentHuman.firstName+“”+currentHuman.lastName+“”+currentHuman.age;
}
var btn=document.getElementById(“btn”);
btn.addEventListener('click',showHumanProps);

厕所
托尼


显示人体道具

处理重复的名字或姓氏。 预创建人员并使用索引存储他们

var humans = {
  0: new Human('John', 'Dalton', 28),
  1: new Human('Anthony', 'Stark', 50),
  //...
};

var human=humans[e.selectedIndex]

也可以尝试此方法-

函数人(userData){
this.lastName=userData.lastName;
this.firstName=userData.firstName;
this.age=userData.age;
}
函数createHumanObj(e){
var e=document.getElementById(“mySelect”);
var selctedHuman=e.options[e.selectedIndex].value;
风险值数据={
“约翰”:{
“名字”:“约翰”,
“姓氏”:“道尔顿”,
“年龄”:28岁
},
“托尼”:{
“名字”:“安东尼”,
“姓氏”:“斯塔克”,
“年龄”:50
}
};
返回新人员(数据[selctedHuman]);
}
(功能(){
var btn=document.getElementById(“btn”);
addEventListener('click',showHumanProps);
函数showHumanProps(){
var log=document.getElementById(“日志”);
var currentHuman=createHumanObj();
log.innerHTML=currentHuman.firstName+“”+currentHuman.lastName+“”+currentHuman.age;
}
})();
选择,按钮,#日志{
显示:块;
利润率:10px自动;
字体大小:25px;
文本对齐:居中;
}

约翰
托尼
展示人体道具

你怎么知道
john
Dalton
和年龄
28
?其他人也一样。这并不比
if…else
解决方案好多少。
var humans = {
  0: new Human('John', 'Dalton', 28),
  1: new Human('Anthony', 'Stark', 50),
  //...
};