我有几个:
<div class="enunt">text here</div>
<div class="ans"><input type="text" id="amount1" style="border: 0; color: #f6931f; font-weight: bold;" /></div>
<div id="slider1" class="slide"></div>
其他具有相同的结构,但ID因其索引号而不同。我需要一个函数来设置JQuery滑块。我做的是这个:
function slider(i) {
$( '#slider' + i ).slider({
value:4,
min: 1,
max: 7,
step: 1,
slide: function( event, ui, i ) {
$( '#amount' + i ).val( ui.value );
}
});
$( '#amount' + i ).val( $( '#slider' + i ).slider( "value" ) );
}
并称之为:
for (var i=1; i<6; i++)
slider(i);
这根本不起作用。我的错误在哪里?这是我的第一个JQuery应用程序,所以请你好。
答案 0 :(得分:2)
您分配给slide
的功能只需要两个参数,它应该是
function slider(i) {
$( '#slider' + i ).slider({
value:4,
min: 1,
max: 7,
step: 1,
slide: function( event, ui ) {
$( '#amount' + i ).val( ui.value );
}
});
$( '#amount' + i ).val( $( '#slider' + i ).slider( "value" ) );
}
还要确保包含jquery ui JS和CSS文件
答案 1 :(得分:2)
你似乎在那里略微过分复杂......这样的事情可能就是你所需要的(我已经在代码中添加了大量的注释来尝试解释发生了什么):
var amountFields = [],
selector = '.slide',
opts = {
value: 4,
min: 1,
max: 7,
step: 1,
slide: function(e, ui) {
var i = ui.handle.closest(selector).data('sliderId');
amountFields[i].val(ui.value);
}
};
// because you have used a '.slide' class
// name on your sliders, you can use .each()
// to iterate through them instead of using
// your for loop that assumes there are only
// ever 5 sliders
$(selector).each(function() {
// get 'i' from the sliders id attribute
var i = this.id.replace(/[a-z\-_]/gi, '');
// initialise slider on the element
// and store 'i' within the elements
// data for easy access in the
// slide method later
$(this).slider(opts).data('sliderId', i);
// DOM querying is a hit on performance
// so cache the jQuery object for re-use
// in the slide method instead of
// re-querying the DOM
amountFields[i] = amountFields[i] || $('#amount' + i);
// set the amounts initial value using
// the opts object instead
amountFields[i].val(opts.value);
});
没有测试过,所以不是100%上面没有错误,但是这样的事情应该有用。
===================================更新=========== ===========================
由于您认为上述内容看起来更复杂,因此完全相同的代码没有注释和缓存来向您展示它实际上有多简单:
var opts = {
value: 4,
min: 1,
max: 7,
step: 1,
slide: function(e, ui) {
var i = ui.handle.closest('.slide').data('sliderId');
$('#amount' + i).val(ui.value);
}
};
$('.slide').each(function() {
var i = this.id.replace(/[a-z\-_]/gi, '');
$(this).slider(opts).data('sliderId', i);
$('#amount' + i).val(opts.value);
});
我之前在缓存中添加了性能,所以没有它,它会执行得更慢,但仍然可以工作。 .replace()
位获取滑块ID并删除任何字母,连字符或下划线,只留下数字,我们需要的位。
答案 2 :(得分:1)
将i
传递到幻灯片功能中,如下所示:
slide: function( event, ui, i ) {
$( '#amount' + i ).val( ui.value );
}
答案 3 :(得分:1)
您的}
似乎缺少右括号function slide(i)
。否则你的脚本对我来说就像一个魅力。
将来,您应该发布您获得的错误,或者您没有获得某个区域。您可以在任何现代网络浏览器的控制台中检查代码是否存在错误。