目前尚不清楚您想对新滑块做什么,但您的代码存在一些问题。首先,您要在第一个滑块 div 内(而不是在下面)添加第二个滑块 div,其次您要添加与第一个滑块具有相同 ID 的滑块 —— 您几乎肯定希望有不同的 ID。最后,您需要在新元素上初始化滑块。
所以,像这样的东西(替换你的$(document).on(...) { ... }
)。
// Global variable to count make the ids different (could embed this on some object)
slider_count = 1;
$(document).on('click', '.addNew', function() {
// Work out the id for the new slider
var new_slider_id = 'slider'+slider_count;
// Attach it to the end of the body -- you might want a 'container' DIV here
$('body').append("<div id='"+new_slider_id+"'></div>");
// Initialize the new slider
$( "#"+new_slider_id ).slider();
// Update our unique id count
slider_count = slider_count + 1;
});
您还需要做一些事情来处理这些值——或者将它们加在一起,或者有单独的总计。您可以为所有滑块 DIV 提供一个类,然后用于each
遍历这些值。或者,由于您可以访问 slider_count 变量,您可以计算出滑块的数量及其 ID。
希望有帮助。
编辑:根据我认为您想要做的添加以下内容,我将尝试解释发生了什么。
首先,不要在 HTML 中嵌入第一个滑块,让生活更轻松,只需在其中放置一个块,稍后将容纳滑块:
<p>
<button class="addNew">Add</button>
<label for="amount">Donation amount ($50 increments):</label>
<input type="text" id="amount" style="border: 0; color: #f6931f; font-weight: bold;" />
</p>
<div id="container">
现在您需要一种创建滑块的方法,将其作为一个函数是有意义的,因为它被调用以响应多个事件(页面加载和按钮单击)。
function createSlider() {
// Work out the id for the new slider
var new_slider_id = 'slider'+createSlider.counter;
// Create a slider with that id and a common slider class in the container
$('#container').append("<div class='amount_slider' id='"+new_slider_id+"'></div>");
// Initialize the new slider
$( "#"+new_slider_id ).slider({
value:100,
min: 0,
max: 500,
step: 50,
change: function() {
updateAmount();
}
});
// Update the amount now to take account of the new default value
updateAmount();
// Update our unique id count
createSlider.counter = createSlider.counter + 1;
}
当调用它时,它会在 DIV 容器中创建一个新滑块,并使用您使用的相同选项对其进行初始化。它使用计数器为每个滑块赋予不同的 ID(从零开始)。计数器作为变量存储在函数中(您可以在 JavaScript 中执行此操作),使其有效地静态化。全局变量也可以工作,但这至少表明计数器仅由该函数使用。
该函数updateAmount()
在滑块更改时和创建滑块后立即调用。第二次调用是必要的,因为我们在 100 美元上启动滑块,因此需要在创建滑块时添加到金额中。更新事件发生在 a 之后change
,您使用slide
了它在任何移动时触发,因此反射量通常是错误的。如果有其他东西改变了基础价值——即另一个脚本,改变也将起作用。
该updateAmount()
函数利用了我们为所有滑块赋予相同类的事实,因此我们可以使用 jQuery 的类匹配和each
函数来遍历它们,如下所示:
function updateAmount() {
var new_amount = 0;
$('.amount_slider').each(function() {
new_amount = new_amount += $(this).slider('value');
});
$( "#amount" ).val( "$" + new_amount );
}
正如我之前所说,由于您知道 counter 的当前值,您还可以手动计算出滑块 ID 列表并使用它。
最后,通过在页面加载时创建第一个滑块(请记住将计数器归零,这在 JavaScript 中并非绝对必要,但通常是一种很好的做法)并将创建操作附加到添加按钮,将它们放在一起:
// Create the first slider
$(document).ready(function() {
createSlider.counter = 0;
createSlider();
});
// Attach the createSlider() action to the 'add' button
$(document).on('click', '.addNew', function() {
createSlider();
});
就是这样——如果这不是你想要做的,希望你能看到逻辑是如何工作的,并改变它以使其按你的意愿工作。