1

基本的に、Jqueryを使用して2つのスライダーを実装しています。最初のスライダーを選択したときに、たとえば0〜36の範囲になるように値を設定したいと思います。2番目のスライダーの最大値を動的に36に設定したい。コードは次のとおりです。2番目のスライダーplsヘルプに値を設定できません。

$(function() {
$( "#slider-range-min" ).slider({
        range: "min",
        value: 0,
        min: 0,
        max: 100,
        slide: function( event, ui ) {
            $( "#greenData" ).val( "0 - " + ui.value );
        }
    });
    $( "#greenData" ).val( "$" + $( "#slider-range-min" ).slider( "value" ) );


});

    $(function() {
    $( "#slider-range-min-amber" ).slider({
            range: "min",
            value: 0,
            min: 0,
            max: 100,
            slide: function( event, ui ) {
                $( "#amberData" ).val( "0 - " + ui.value );
            }
        });
        $( "#amberData" ).val( "$" + $( "#slider-range-min-amber" ).slider( "value" ) );
    }); 

HTMLコードは次のとおりです。

<tr>
<td align="right"><label for="greenValue"
                            style="font-family: sans-serif; font-size: small;">
                                Green</label>
                                 </td>
                                 <td>   <div id="slider-range-min">  </div>  </td>
                                 <td> <input type="text" id="greenData" style="border: 0; color: green; font-weight: bold;" readonly="readonly" />  
                          </td>
                    </tr>

                    <tr>
                        <td align="right"><label
                            style="font-family: sans-serif; font-size: small;">
                                Amber</label>
                                 </td>
                                 <td id="amberTdId">    <div id="slider-range-min-amber">  </div>    </td>
                                 <td> <input type="text" id="amberData" style="border: 0; color: #FF7E00; font-weight: bold;" readonly="readonly" /> </td>
                    </tr>

緑のスライダーの範囲を0〜36で選択すると、値36がスライダー2に設定されます。つまり、2番目のスライダーの範囲は最小値:0および最大値:36である必要があります。

どうすればそれをやめられますか。前もって感謝します。

4

2 に答える 2

3

このコードを試してください:

$(function() {
$( "#slider-range-min-amber" ).slider({
        range: "min",
        value: 0,
        min: 0,
        max: 100,
        slide: function( event, ui ) {
            $( "#amberData" ).val( "0 - " + ui.value );
        }
    });
    $( "#amberData" ).val( "$" + $( "#slider-range-min-amber" ).slider( "value" ) );
}); 

$(function() {
$( "#slider-range-min" ).slider({
    range: "min",
    value: 0,
    min: 0,
    max: 100,
    slide: function( event, ui ) {
        $( "#greenData" ).val( "0 - " + ui.value );
        var value = ui.value;
        var max = ui.value;
        $( "#slider-range-min-amber" ).slider("option","max",max).slider("value",value);
        $( "#amberData" ).val( "0 - " + ui.value );

    }
});
$( "#greenData" ).val( "$" + $( "#slider-range-min" ).slider( "value" ) );
});

または私のフィドルを参照してください:http://jsfiddle.net/QPnxf/1/

于 2012-12-10T10:40:11.023 に答える
2

簡単な答えは、$('#greenData').val('0 - ' + ui.value);行の後に次を追加することです。

$('#slider-range-min-amber').slider('option', 'max', ui.value);
$('#amberData').val('0 - ' + ui.value);

ただし、そのようにDOMを再クエリすると、パフォーマンスが低下します。jQueryオブジェクトをキャッシュして再利用することをお勧めします。より効率的な解決策は次のようになります。

$(function() {
  var green = $('#slider-range-min'),
      amber = $('#slider-range-min-amber'),
      greenData = $('#greenData'),
      amberData = $('#amberData'),
      opts = {
        range: 'min',
        value: 0,
        min: 0,
        max: 100
      };

  greenData.val('$' + opts.value);
  green.slider(opts).slider('option', 'slide', function(e, ui) {
    greenData.val(opts.min + ' - ' + ui.value);

    // this is the bit that updates the 
    // max value of the second slider
    amber.slider('option', 'max', ui.value);
    amberData.val(opts.min + ' - ' + ui.value);
  });

  amberData.val('$' + opts.value);
  amber.slider(opts).slider('option', 'slide', function(e, ui) {
    amberData.val(opts.min + ' - ' + ui.value);
  });
});
于 2012-12-10T10:44:16.220 に答える