6

複数のスライダーが最大値の 24 を超えないように、いくつかの JavaScript コードを作成することができました。

問題は、jquery モバイルのマルチページ テンプレートでこれを使用しようとすると、最初のページでのみ機能し、マルチページ テンプレートを介して読み込まれた 2 番目のページのチェックに失敗することです。

これが私のjsFiddleで、状況をよりよく理解できます

【JsFiddleの例】( http://jsfiddle.net/WEewU/20/

最初のページは機能しますが、2 ページ目は機能しません。

ページ上のスライダーの数が 24 時間を超えないようにしています。そして、jquery モバイルのすべてのマルチページ テンプレートでこのコードを使用します。

完全なコード

    <!DOCTYPE html>

<head>
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0-alpha.1/jquery.mobile-1.2.0-alpha.1.min.css"
    />
    <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.2.0-alpha.1/jquery.mobile-1.2.0-alpha.1.min.js"></script>
</head>

<body>
    <form>
        <!-- Home Page-->
        <div data-role="page" id="home">
            <div data-role="header" data-position="fixed" data-id="myheader">
                 <h1>test</h1>

            </div>
            <!-- /header -->
            <div data-role="content">

                <ul id="sliders1">
                    <li>
                        <input type="range" id="slider" class="value" name="slider1" value="0"
                        min="0" max="24" data-highlight="true" />
                    </li>
                    <li>
                        <input type="range" class="value" id="slider" name="slider2" value="0"
                        min="0" max="24" data-highlight="true" />
                    </li>
                    <li>
                        <input type="range" class="value" id="slider" name="slider3" value="0"
                        min="0" max="24" data-highlight="true" />
                    </li>
                </ul> <a href="#home2">Link to 2nd page</a> 
            </div>
        </div>
        <div data-role="page" id="home2">
            <div data-role="header" data-position="fixed" data-id="myheader">
                 <h1>test</h1>

            </div>
            <!-- /header -->
            <div data-role="content">
                <ul id="sliders">
                    <li>
                        <input type="range" id="slider" class="value" name="slider4" value="0"
                        min="0" max="24" data-highlight="true" />
                    </li>
                    <li>
                        <input type="range" class="value" id="slider" name="slider5" value="0"
                        min="0" max="24" data-highlight="true" />
                    </li>
                    <li>
                        <input type="range" class="value" id="slider" name="slider6" value="0"
                        min="0" max="24" data-highlight="true" />
                    </li>
                </ul> <a href="#home">Link to Home</a> 
            </div>
        </div>
    </form>
</body>

Javascript

     var sliders = $("#sliders1 .slider");

                    sliders.each(function() {
                        var max = 24;
                        var value = Number($(this).text(), 10),
                            availableTotal = max;
                    });

                    $(".value").change(function() {
                        var thisAmount = Number($(this).prop("value"));
                        var totalMax = 24;
                        var indMin = Number($(this).attr("min"));
                        var indMax = Number($(this).attr("max"));
                        var total = 0;

                        //Get the values of all other text boxes
                        $('.value').not(this).each(function() {
                            total += Number($(this).prop("value"));
                        });

                        //Find the remaining from our total sliders max
                        var remaining = totalMax - total;

                        if (remaining < 0) {
                            remaining = 0;
                        }
                        //if we are under our minimums, go for it! Otherwise, reduce the number.
                        if (thisAmount >= indMin && thisAmount < indMax && thisAmount < totalMax && thisAmount < remaining) {
                            $(this).siblings(".slider").slider("option", "value", thisAmount);
                            //total += thisAmount;
                        } else {
                            //var setMax = ((indMax + totalMax) - Math.abs(indMax - totalMax)) / 2;
                            var setMax = Math.min(indMax, totalMax, remaining);
                            $(this).siblings(".slider").slider("option", "value", setMax);
                            $(this).prop("value", setMax);
                            //total += (thisAmount - setMax);
                        }

                        //above was getting buggy, so lets just reset total and get it again
                        total = 0;
                        //Get the values of all text boxes
                        $('.value').each(function() {
                            total += Number($(this).prop("value"));
                        });
                        //Find our new remaining number after updating total for this value
                        remaining = totalMax - total;
                        if (remaining < 0) {
                            remaining = 0;
                        }
                        //Set each slider to the current point and update their max values.
                        $('.value').each(function() {
                            var sliderVal = Number($(this).prop("value"));
                            var sliderMin = Number($(this).attr("min"));
                            var sliderMax = Number($(this).attr("max"));
                            var setNewMax = (((sliderMax + totalMax) - Math.abs(sliderMax - totalMax)) / 2);
                            var newMax = sliderVal + remaining;

                            if (newMax < setNewMax) {
                                $(this).siblings('.slider').slider("option", "max", newMax);
                            } else {
                                $(this).siblings('.slider').slider("option", "max", setNewMax);
                            }
                            $(this).prop("max", setNewMax);
                        });
                    });
4

1 に答える 1

3

jQuery Mobileページイベントと呼ばれる美しいものがあります。それらは特定のページまたは複数のページで実行され、jQuery Mobile特定のイベントとしてカウントされるだけで機能します。詳細については、このARTICLEをご覧ください。透明性を高めるために、これは私の個人的なブログです。または、こちらをご覧ください。

これはコードの実例です: http://jsfiddle.net/Gajotres/e8xZ2/

変更を見てみましょう:

  1. 左上隅で jQuery 1.8.3 が選択され、* *onDomReady**に変更されます
  2. jQuery コードは次のように初期化されます。

    $(document).on('pagebeforeshow', '#home, #home2', function(){   
    

    これにより、このコードが ID がhomeおよびhomn2のページで実行されるようになります。

  3. スライダーと入力ボックスには、$.mobile.activePage. 基本的に、これはアクティブなページjQuery Mobileセレクタです。

    $.mobile.activePage.find("#sliders1 .slider");
    

    $.mobile.activePage.find('.value').not(this).each(function() {
    
  4. フレームjQuery Mobileワークが安定した 1.2 バージョンにアップグレードされている

于 2013-02-22T19:51:33.917 に答える