我之前发布了这个问题的一个版本(JS -构造器引用),并在副本中找到了答案,特别是Access / process (嵌套)对象、数组或JSON。从现在开始,我还有一段可笑的时间让这一切按计划进行。
给出以下示例代码:
function f1(args) {
this.defaults = {
param1 : 100,
param2 : 900;
}
this.ranges = {
param1 : { min : 0, max : 500 },
param2 : { min : 0, max : 1000 };
}
this.steps = {
param1 : 50,
param2 : 100;
}
var myF1 = new f1();
我已经阅读了以前的副本,并通过以下方法学习了如何访问未知的属性名称:
for (var propertyName in myF) {
newName = propertyName;
}
我需要做的是循环函数(或任何函数),并为函数构建HTML5范围输入(请记住,参数名称将有很大的不同或随机,因此我假设需要为密钥本身循环。因此,在f1
/myF1
的情况下,生成的HTML5是:
param1: <input type="range" name="param1" min="0" max="500" steps="50" />
param2: <input type="range" name="param2" min="0" max="1000" steps="100" />
注意: range=、name=、min=、max=和step=的值都是从函数的属性动态生成的。
我试过用循环键,要求值,以及我能做的任何其他研究和尝试,但我总是用变量覆盖自己,我猜这是远远超出了这位业余游泳者所能找到的。
同时,要意识到每个参数都有一个defaults
、ranges
和steps
,所以我们不需要担心那种程度的随机化或变化。谢谢你,所以-JS大师!
发布于 2014-01-26 06:07:05
看起来,您更愿意迭代myF1.defaults
、myF1.ranges
或myF1.steps
的属性,而不是myF1
本身的属性(因为它们是固定的)。
我不知道您尝试过什么,但是您可以这样创建所需的DOM元素:
var myF1 = new f1();
var elements = [];
for (var param in myF1.ranges) {
var input = document.createElement('input');
input.type = 'range';
input.name = param;
input.min = myF1.ranges[param].min;
input.max = myF1.ranges[param].max;
input.step = myF1.steps[param];
input.value = myF1.defaults[param];
var span = document.createElement('span');
span.appendChild(document.createTextNode(param + ': '));
span.appendChild(input);
elements.push(span);
}
只需迭代ranges
的属性,并访问steps
和defaults
的相同属性。然后你可以用elements
做你想做的任何事情。演示
发布于 2014-01-26 06:05:35
首先,您的示例中有两个错误。
function f1(args) {
的开始托架没有关闭。this.defaults
和this.steps
中最后一个条目的分号不应该在那里。下面的代码应该(依赖于jQuery $
)创建两个类型范围的正确工作的输入元素,尽管代码强烈依赖于给定的数据格式。One输入元素通过循环myF1.steps
属性获得值,每个名称都在defaults
和ranges
上试用。助手函数applyAttr
通过另一个propertyName或直接值安全地访问这些值。
工作柱塞
$(document).ready(function() {
function f1(args) {
this.defaults = {
param1 : 100,
param2 : 900
}
this.ranges = {
param1 : { min : 0, max : 500 },
param2 : { min : 0, max : 1000 }
}
this.steps = {
param1 : 50,
param2 : 100
}
}
var myF1 = new f1();
function applyAttr(inElem, data, propName) {
if(data.hasOwnProperty(propName))
inElem.prop(propName, data[propName]);
else {
inElem.prop(propName, data);
}
}
for(var stepsProp in myF1.steps) {
var inputElem = $('<input type="range"/>');
inputElem.prop('step', myF1.steps[stepsProp]);
if(myF1.defaults.hasOwnProperty(stepsProp)) {
inputElem.prop('value', myF1.defaults[stepsProp]);
}
if(myF1.ranges.hasOwnProperty(stepsProp)) {
applyAttr(inputElem, myF1.ranges[stepsProp], 'min');
applyAttr(inputElem, myF1.ranges[stepsProp], 'max');
}
$('body').append(inputElem);
}
});
https://stackoverflow.com/questions/21359995
复制相似问题