如何使用$this或传递vars减少javascript代码
下面是整个测试代码 最后,我将有许多具有不同ID(无模式)的滑块和输入字段,因此我希望使用$this或pass vars,而不是一堆重复的代码 滑块的最大值为3:5、10、15如何使用$this或传递vars减少javascript代码,javascript,php,jquery,jquery-ui,Javascript,Php,Jquery,Jquery Ui,下面是整个测试代码 最后,我将有许多具有不同ID(无模式)的滑块和输入字段,因此我希望使用$this或pass vars,而不是一堆重复的代码 滑块的最大值为3:5、10、15 <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="css/jquery-ui.css" type="text/css" media="all" /> <script src="js/j
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="css/jquery-ui.css" type="text/css" media="all" />
<script src="js/jquery.min.js" type="text/javascript"></script>
<script src="js/jquery-ui.min.js" type="text/javascript"></script>
<script src="js/jquery.ui.touch-punch.min.js"></script>
<script>
$(function() {
$( "#slider1" ).slider({
value:0, min: 0, max: 5, step: 1,
slide: function( event, ui ) {
$( "#amount1" ).val( ui.value );
}
});
$( "#amount1" ).val( $( "#slider1" ).slider( "value" ) );
$( "#slider2" ).slider({
value:0, min: 0, max: 10, step: 1,
slide: function( event, ui ) {
$( "#amount2" ).val( ui.value );
}
});
$( "#amount2" ).val( $( "#slider2" ).slider( "value" ) );
$( "#slider3" ).slider({
value:0, min: 0, max: 15, step: 1,
slide: function( event, ui ) {
$( "#amount3" ).val( ui.value );
}
});
$( "#amount3" ).val( $( "#slider3" ).slider( "value" ) );
});
</script>
<style>
.steps {
border: 1px solid transparent;
position: relative;
height: 30px;
}
.tick {
border: 1px solid transparent;
position: absolute;
width: 1.2em;
margin-left: -.6em;
text-align:center;
left: 0;
}
.ui-slider .ui-slider-handle {
width: 2em;
height: 3em;
top: -1.4em;
margin-left: -1em;
}
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
border: 2px solid #d3d3d3;
background: #333;
}
</style>
</head>
<body style="font-size: small;">
<div style="display:block;margin:100px auto;padding:0 8%">
<input type="text" id="amount1" style="border:0 none">
<div id="slider1"></div>
<div class="steps">
<?php
for ($i=0, $t=5; $i<=$t; $i++) {
echo '<span class="tick" style="left:'.(100/$t*$i).'%;';
if ($i==ceil($t/2)) echo 'font-weight:bold;font-size:medium;';
echo '">|<br>'.$i.'</span>';
}
?>
</div>
</div>
<div style="display:block;margin:100px auto;padding:0 8%">
<input type="text" id="amount2" style="border:0 none">
<div id="slider2"></div>
<div class="steps">
<?php
for ($i=0, $t=10; $i<=$t; $i++) {
echo '<span class="tick" style="left:'.(100/$t*$i).'%;';
if ($i==ceil($t/2)) echo 'font-weight:bold;font-size:medium;';
echo '">|<br>'.$i.'</span>';
}
?>
</div>
</div>
<div style="display:block;margin:100px auto;padding:0 8%">
<input type="text" id="amount3" style="border:0 none">
<div id="slider3"></div>
<div class="steps">
<?php
for ($i=0, $t=15; $i<=$t ; $i++) {
echo '<span class="tick" style="left:'.(100/$t*$i).'%;';
if ($i==ceil($t/2)) echo 'font-weight:bold;font-size:medium;';
echo '">|<br>'.$i.'</span>';
}
?>
</div>
</div>
</body>
</html>
$(函数(){
$(“#滑块1”).滑块({
值:0,最小值:0,最大值:5,步长:1,
幻灯片:功能(事件、用户界面){
$(“#amount1”).val(ui.value);
}
});
$(“#amount1”).val($(“#slider1”).slider(“value”);
$(“#滑块2”).滑块({
值:0,最小值:0,最大值:10,步长:1,
幻灯片:功能(事件、用户界面){
$(“#数量2”).val(ui.value);
}
});
$(“#数量2”).val($(“#滑块2”).slider(“值”);
$(“#滑块3”).滑块({
值:0,最小值:0,最大值:15,步长:1,
幻灯片:功能(事件、用户界面){
$(“#数量3”).val(ui.value);
}
});
$(“#amount3”).val($(“#slider3”).slider(“value”);
});
.步骤{
边框:1px实心透明;
位置:相对位置;
高度:30px;
}
.tick{
边框:1px实心透明;
位置:绝对位置;
宽度:1.2米;
左边距:-.6em;
文本对齐:居中;
左:0;
}
.ui滑块.ui滑块句柄{
宽度:2米;
高度:3em;
顶部:-1.4em;
左边距:-1米;
}
.ui状态默认值.ui小部件内容.ui状态默认值.ui小部件标题.ui状态默认值{
边框:2px实心#D3;
背景:#333;
}
我认为循环可以减少重复代码:
var numElements = 3;
for (var i = 0; i < numElements; i++) {
var $slider = $('#slider'+i);
var $amount = $('#amount'+i);
$slider.slider({
value:0, min: 0, max: 5, step: 1,
slide: function( event, ui ) {
$amount.val( ui.value );
}
});
$amount.val( $slider.slider( "value" ) );
}
var numElements=3;
对于(变量i=0;i
您应该为滑块提供数据
属性,以保存滑块值、最小值和最大值等,以及一个不同的类
,然后在其上初始化滑块。例如:
<div style="display:block;margin:100px auto;padding:0 8%">
<input type="text" id="amount3" style="border:0 none" class="slider_value">
<div id="slider3" class="slider_container" data-value="0" data-min="0" data-max="15" data-steps="1"></div>
<div class="steps">
<?php
for ($i=0, $t=15; $i<=$t ; $i++) {
echo '<span class="tick" style="left:'.(100/$t*$i).'%;';
if ($i==ceil($t/2)) echo 'font-weight:bold;font-size:medium;';
echo '">|<br>'.$i.'</span>';
}
?>
</div>
</div>
如上所述:#slider和#amount将是一组其他ID。“一堆其他ID”并不表示ID没有遵循模式——我给出的答案简化了您的示例代码,这就是我们需要处理的全部内容。如果你想发布更具体的细节,我可以修改我的回答编辑过的原文,以表明没有最终IDS的模式,已经接近了!但它仅在最后一个滑块移动时更新最后一个输入字段。我删除了slider3,当slider2成为最后一个时,结果是一样的。仅更新最后一个滑块输入。您确定使用的是最新代码吗?我已经编辑了我的文章很多次,最后一次编辑必须完全使用
slide
function.SWEET!看来我一定是在你做改变时抄下了你的答案。这非常有效。以前我可以使用onupdate,然后使用document.getElementById(“slider3”).value=data['xyz']代码>。如何使用上面的代码设置滑块值?(我在这里学习)。或者这应该作为一个新问题发布?您仍然可以使用onupdate
事件,只是现在您将输入引用为$(this).prev('.slider_value').val(data['xyz'])
。这将得到具有class=“slider\u值”
的前一个元素。如果需要以编程方式更改某个滑块的值,仍然可以使用id
获取所需的滑块,如$(“#slider3”)。slider('value',7)代码>-这将滑块3的值设置为7。
$(function(){
var value, step, min, max, input;
$('.slider_container').each(function(){
input = $(this).prev('.slider_value');
value = $(this).data('value');
step = $(this).data('steps');
min = $(this).data('min');
max = $(this).data('max');
$(this).slider({
value: value,
min: min,
max: max,
step: step,
slide: function(event, ui) {
$(this).prev('.slider_value').val(ui.value);
}
});
input.val($(this).slider("value"));
});
});