2016-08-23 12 views
0

このスライダーは100%の値を共有する4つのスライダーのコンボです。問題は、入力の値を選択しないが、ページが更新されるたびにスライダーごとに25%にリセットされることです。誰かが、スライダノブの位置を決定する前に、入力値をスライダでピッキングすることで助けてもらえますか?jQueryスライダー(更新後のドラッグ時の入力値)

HTML

<div align="center" class="title">Statistiche:</div> 
<div id="outer_container"> 
<div id="container"> 
<span class='multislider'>Hokuto ShinKen (<input type='text' required name='question_3' class='amount' value='5' data-min='0' data-max='100'/>) 
<div class='slider tied'> 
</div> 
Nanto (<input type='text' required name='question_3' class='amount' value='15' data-min='0' data-max='100'/>) 
<div class='slider tied'> 
</div> 
Gento (<input type='text' required name='question_3' class='amount' value='50' data-min='0' data-max='100'/>) 
<div class='slider tied'> 
</div> 
Artiglio del Monte Taishan (<input type='text' required name='question_3' class='amount' value='30' data-min='0' data-max='100'/>) 
<div class='slider tied'></div> 
</span> 
</div> 
</div> 

jQueryの

var init = true; 
    var elements = $(".multislider").children(".slider.tied").length; 
    var MAX = 100; 
    var inpVal = $('.txt_name').val(); 
    var initValue = (inpVal) >> 0; 
    //var initValue = (MAX/elements) >> 0; 
    var InitMod = MAX % elements; 

    $(".slider.tied").each(function() { 
     var slidersTied = $(".slider.tied"); 
     var context = $(this); 

     var input = context.prev(".amount"); 
     var val = input.data('answer'); 
     var min = input.data('min'); 
     var max = input.data('max'); 
     var range = 1; 
     var proceed = false; 

     $(this).empty().slider({ 
      value: val, 
      min: min, 
      max: max, 
      range: range, 
      animate: "slow", 
      create: function(event, ui){ 

       if (InitMod > 0) { 
        $(this).slider('value', initValue + 1); 
        $(this).prev('.amount').val(initValue + 1); 
        InitMod = InitMod - 1; 
       } 
       else 
       { 
        $(this).slider('value', initValue); 
        $(this).prev('.amount').val(initValue); 
       } 

      }, 
      slide: function(e, ui) { 

       // Update display to current value 
       $(this).prev('.amount').val(ui.value); 

       var current = ($(this).index()/2) >> 0; 
       var total = 0; 
       var counter = 0 

       slidersTied.not(this).each(function() { 

        total += $(this).slider("option", "value");     
        counter += 1; 
       }); 

       total += ui.value; 

       if (total != MAX){ 
        proceed = true; 
       } 

       var missing = MAX - total; 
       console.log("missing: " + missing); 

       counter = 0; 

       if(proceed) { 

        //carico vettore elementi 
        var elements = []; 

        slidersTied.each(function() { 
         elements[counter] = $(this); 
         counter += 1; 
        }); 

        var endIndex = counter - 1; 
        counter = endIndex + 1; 

        while (missing != 0) { 

         console.log("current counter: " + counter); 
         do { 
          if (counter == 0) 
          { 
           counter = endIndex; 
          } 
          else 
          { 
           counter = counter - 1; 
          } 
         } while(counter == current) 

         console.log("elemento attuale: " + counter); 

         var value = elements[counter].slider("option", "value"); 
         var result = value + missing; 

         if (result >= 0) 
         { 
          elements[counter].slider('value', result); 
          elements[counter].prev('.amount').val(result); 

          missing = 0;  
         } 
         else 
         { 
          missing = result; 
          elements[counter].slider('value', 0); 
          elements[counter].prev('.amount').val(0); 
         } 

        } 

       } 

      } 
     }); 
    }); 

http://jsfiddle.net/vuQz5/116/

おかげ

+0

* 'リフレッシュ済み '*何ですか?あなたは値を格納する必要がありますか?あなたのコードには 'localStorage'(またはソート・ストア)はありません。 –

+0

入力から値を取り出すためにスライダが必要です。スライダーは 'initValue'から100%/ 4の値を得ます。小さな変更で可能です。 – Boris

+0

@ RokoC.Buljan彼は入力ボックスからスライダーを初期値に設定したかっただけです。 –

答えて

0

二つの問題、var val = input.data('answer');がありますあなたが必要なものは、このようなデータ値が存在しない、間違っていますインプを取得することですこのようなt値:

$(this).slider('value', val); $(this).prev('.amount').val(val);

var val = input.val(); val = (val) ? val : 0;

ともあなたが唯一else句であるものは何でも必要if条件の必要がない代わりにinitValuecreate方法でその値を使用します

これをチェックfiddle

関連する問題