【发布时间】:2018-09-11 20:38:55
【问题描述】:
我可以毫无问题地使用 JavaScript 更新 div。例如,两个div的初始值显示在左边的图像中,点击测试按钮后的值显示在右边。
当我单击测试按钮时,计数器会增加 1,并且 div 的值会更改如下:
var ela = document.getElementById("a");
var elb = document.getElementById("b");
$("#" + ela.id).html("new value " + ela.id + " ");
$("#" + elb.id).html("new value " + elb.id + " ");
到目前为止一切顺利,但现在我想更改 div 的顺序:当计数器是偶数时,我希望 div a = 黄色位于顶部(div b = 底部为灰色),另一个计数器不均匀时的方法。
为了简单起见,我为每个可能的订单 (a,b) 和 (b,a) 使用了 2 个小数组,并且助手“订单”将根据计数器值 (x %2 是否为零)
不幸的是,结果不是我想要的和期望的。 div 正确地改变了位置,但它们的文本不是。第一次单击后,计数器从 5 变为 6,因此黄色 div 从下到上移动,但 div 内的文本是错误的,我希望黄色 div 中的“新值 a”向上移动,但我得到了'new value b a' 代替(其他 div 也一样)
另外,当我检查控制台输出中的 div 时,我看到了奇怪的结果,Meteor 似乎对 div id 感到困惑?看下图,第一个div既是a又是b,同时是黄色和灰色……
有人知道这是为什么吗?我该如何解决?
我知道我可以使用助手在正确的 div 中获取正确的文本。但我的最终目标不是更改 div 中的文本,而是我想使用 nouislider 创建一个滑块,如下所示:
var noUiSlider = require('nouislider');
var sliderHtmlElement = document.getElementById("a");
var options = {
start: [0, 100],
range: {
'min': [0],
'max': [100]
}
};
noUiSlider.create(sliderHtmlElement, options);
我的完整测试代码:
<template name="MyTemplate">
{{x}}
<br>
<br>
{{#each order}}
<div class="{{label}}" id="{{label}}"
style="background-color: {{color}};">
start value {{label}}
</div>
<br>
{{/each}}
<button class="test">test</button>
</template>
var order1;
var order2;
Template.MyTemplate.onCreated(function() {
Session.set("x", 5);
var or0 = [];
or0["label"] = "a";
or0["color"] = "yellow";
var or1 = [];
or1["label"] = "b";
or1["color"] = "grey";
order1 = [];
order1[0] = or0;
order1[1] = or1;
order2 = [];
order2[0] = or1;
order2[1] = or0;
});
Template.MyTemplate.events({
'click .test': function(event) {
var varx = Session.get("x") + 1;
Session.set("x", varx);
createSliders();
}
});
Template.MyTemplate.helpers({
x: function() {
return Session.get("x");
},
order: function() {
if (Session.get("x") % 2 === 0) {
return order1;
} else {
return order2;
}
}
});
function createSliders() {
var ela = document.getElementById("a");
var elb = document.getElementById("b");
console.log(ela);
console.log(elb);
$("#" + ela.id).html("new value " + ela.id + " ");
$("#" + elb.id).html("new value " + elb.id + " ");
}
【问题讨论】:
-
所以如果我做对了,你的主要问题是在没有助手的情况下在 div 目标内创建 nouislider?
-
感谢您的回复。我的主要目标是创建一个根据某些参数上下移动的滑块列表。我创建滑块没有问题,但我无法上下移动它们。因此,我创建了没有滑块的简单示例,因为 javascript 生成的 div 值也是如此:我可以创建它们,但如果没有奇怪的结果,我无法上下移动它(参见第二张图片,显示非常奇怪的控制台输出,div 都是黄色的和灰色)
标签: javascript meteor nouislider