0

シングル ページ アプリを開発しており、数秒後に消えるスプラッシュ スクリーンを挿入しました。しかし、次のページが読み込まれるselectと、 とìnput範囲の処理に問題が発生します。私はそれらの初期化を強制できると考えました...しかし、それは良い習慣ではないように感じます....そして、これは $(document).ready または $(document).on またはそのようなものを使用することの問題です(私はjqueryの初心者)。助けていただけますか?

これがhtmlです:index.html

    <!DOCTYPE html>
    <html>
    <head>
        <link rel="stylesheet" href="css/jquery.mobile-1.3.0.css" type="text/css" media="all" />
        <link rel="stylesheet" href="css/style.css" type="text/css" media="all" />
        <script src="js/jquery-1.9.1.js"></script>
        <script src="js/jquery.mobile.config.js"></script>
        <script src="js/jquery.mobile-1.3.0.js"></script>
        <script src="js/jquery-geturlvar.js"></script>
        <script src="js/boardDims.js"></script>
        <script src="js/functions.js"></script>
        <script src="cordova.js"></script>
        <script>
        $(document).one('deviceready', initApplication);
        </script>
    </head>
<body>

    <!-- SPLASH PAGE -->
    <div id="splash-page" data-role="page">
        <header data-role="header">
            <h1>LOUIZ</h1>
            <h1>get the board you deserve</h1>
        </header>
    </div>


    <!-- INDEX PAGE --> 
    <div id="welcome-page" data-role="page">
        <header data-role="header">
            <h1>my App</h1>
        </header>
        <div id="content" data-role="content">      
            <div id="resetbuttondiv">
                <button type="button" id="resetbutton" data-inline="true" data-mini="true">Reset fields
                </button>
            </div>      
            <form name="userdata" method="get">
                <select id="chosenpro">
                </select>
                <select id = "chosenbrand">
                </select>
                <select id = "userchosenpromodel">
                </select>
                <div id="weightdata" class=ui-grid-b>
                    <div class=ui-block-b>
                        <input type="number" name="userweight" value="76" required placeholder="Enter your precise current weight">
                    </div>
                    <div class=ui-block-c>
                        <select id="weightunit">
                          <option value = "kg">kg</option>
                          <option value = "lbs">lbs</option>
                        </select>
                    </div>
                </div>

            <p>
                <input id="levelrange" type="range" min="0" max="10" value="8" name="userlevelofsurfing" />
                <div id="leveldisplay"><strong>Very good:</strong> </div>
            </p>

            <button id="submitbutton">Get it</button>
        </form>
        </div>
     </div>
<!-- RESULT PAGE -->
    <div id="result-page" data-role="page">     
     </div>
<!-- EXPLANATION PAGE -->
    <div id="explanation-page" data-role="page">
     </div>
   </body>
</html> 

これがjsです:boarDim.js

$(document).ready(function() {

//MAKE THE SPLASH DISAPPEAR
$(function() {
  setTimeout(function(){
       $.mobile.changePage("#welcome-page", "fade");
    }, 1000);
});

//global declarations   
var userLength;
var userWidth ;
var userThick ;
var userVolume;
var prodata=[];

var request = $.get("proDB.txt", function(data) {
    var lines=data.split(/\n/);
    var i;
    prodata.push(0);
    var fieldnames=lines[0].split(/\t/);
    for (i = 1; i < lines.length-1; ++i) {
        var fields=lines[i].split(/\t/);
        prodata.push(i);            
        var j;
        prodata[i]={};
        prodata[i]['id']=i; //auto id, there is no more 'id' column in the DB file.
        for (j = 0; j < fields.length; ++j) {
            var str=fieldnames[j];
            prodata[i][str]=fields[j];  
        }
    }
    //SORT BY NAME
    prodata.sort(SortByName);

    //VERSION 3 BOUTONS
    resetLists(prodata);

    //RESORT BY ID (to make it usable later)
    prodata.sort(SortById);

}, 'text');

if ($("#weightunit").is(":disabled")) {
        $('#weightunit').selectmenu('enable');
}

//LISTEN TO RESET BUTTON
$("#resetbutton").click(function(){resetLists(prodata);});

//INITIALISATIONS
$("#chosenpro").selectmenu(); // Initializes
$("#chosenbrand").selectmenu(); // Initializes
$("#userchosenpromodel").selectmenu(); // Initializes
$("#weightunit").selectmenu(); // Initializes


//LISTEN TO PRO CHOICE
$("#chosenpro").change(function(){
    var proId = $(this).find(":selected").val();
    var brandId = $('#chosenbrand').find(":selected").val();
    var optionsbrand = '';
    var dummy='';
    var usebrandId;
    //LIST ALL BRANDS
    for (i = 1; i < prodata.length; ++i) {
        if (prodata[i]['name'] == prodata[proId]['name']) {
            if (prodata[i]['brand'] != dummy ) {
                optionsbrand   += '<option value="' + prodata[i]['id'] + '">' + prodata[i]['brand'] +'</option>';
                if (prodata[i]['brand']==prodata[brandId]['brand']) {
                    usebrandId=1;
                }else{
                    usebrandId=0;
                }
            }
            dummy=prodata[i]['brand'];
        }
    }
    $("#chosenbrand").html(optionsbrand);
    $('#chosenbrand').selectmenu("refresh", true);
    var selectedBrandID;
    if (usebrandId==1) {
        selectedBrandID=brandId;
    }else{
        selectedBrandID=$('#chosenbrand').find(":selected").val();
    }
    //ENABLE MODELS BUTTON      
    if ($("#userchosenpromodel").is(":disabled")) {
            $('#userchosenpromodel').selectmenu('enable');
    }
    //LIST MODELS 
    var optionsmodel = '';
    for (i = 1; i < prodata.length; ++i) {
        if (prodata[i]['name'] == prodata[proId]['name'] && prodata[i]['brand'] == prodata[selectedBrandID]['brand'] ) {
                optionsmodel  += '<option value="' + prodata[i]['id'] + '">' + prodata[i]['model'] +'</option>';
        }
    }
    $("#userchosenpromodel").html(optionsmodel);
    $('#userchosenpromodel').selectmenu("refresh", true);
});


//LISTEN TO BRAND CHOICE
$("#chosenbrand").change(function(){
    //LIST CORRESPONGING PROS 
    var brandid = $(this).find(":selected").val();
    var previouslySelectedPro = $('#chosenpro').find(":selected").val();
    //console.log("chosen brand "+prodata[brandid]['brand']);
    var optionspro = '';
    var optionsmodel = '';
    var alreadyusedpros=[];
    for (i = 1; i < prodata.length; ++i) {
        if (prodata[i]['brand'] == prodata[brandid]['brand']) {
            if (jQuery.inArray(prodata[i]['name'], alreadyusedpros) == -1 ) {
                optionspro   += '<option value="' + prodata[i]['id'] + '">' + prodata[i]['name'] +'</option>';
                alreadyusedpros.push(prodata[i]['name']);
            }
        }
    }
    $("#chosenpro").html(optionspro);
    $('#chosenpro').selectmenu("refresh", true);

    //If previously selected pro has this brand, then reselect it
    var targetId=$('#chosenpro').find('option:contains('+ prodata[previouslySelectedPro]['name'] +')').val(); //get the option that corresponds to the previouslySelectedPro
    if (typeof targetId != 'undefined') {
        $('#chosenpro option[value="' + targetId + '"]').attr("selected", "selected");
    }

    //$("#chosenpro").html(optionspro);
    $('#chosenpro').selectmenu("refresh", true);
    //ENABLE MODELS BUTTON      
    if ($("#userchosenpromodel").is(":disabled")) {
        $('#userchosenpromodel').selectmenu('enable');
    }
    $('#userchosenpromodel').selectmenu("refresh", true);

    //GET MODELS CORRESPONDING TO CHOSEN PRO BY TRIGGERING PRO BUTTON LISTENER
    $('#chosenpro option:first').attr("selected", "selected"); //ça ne marche pas quand un pro est déjà selectionné par ligne 129 ce qui est tant mieux.
    $('#chosenpro').selectmenu("refresh", true);
    $('#chosenpro').trigger('change');
    $('#userchosenpromodel').selectmenu("refresh", true);

    //REMETTRE TOUTES LES MARQUES S'IL CHANGE DE CHOIX
    var optionsbrand = '';
    var alreadyusedbrands=[];
    for (i = 1; i < prodata.length; ++i) {
        if (jQuery.inArray(prodata[i]['brand'], alreadyusedbrands) == -1 ) {
            optionsbrand += '<option value="' + prodata[i]['id'] + '">' + prodata[i]['brand']+'</option>';
            alreadyusedbrands.push(prodata[i]['brand']);
        }
    }
    $("#chosenbrand").html(optionsbrand);
    //RESELECT THE ONE THAT'S BEEN SELECTED
    $('#chosenbrand').find('option:contains('+ prodata[brandid]['brand'] +')').attr("selected", "selected");
    $('#chosenbrand').selectmenu("refresh", true);
});

//LISTEN TO LEVEL OF SURFING
$("#levelrange").on("slidestop",function () {                    
    var newValue = parseInt($('#levelrange').val());
    var textsupp;
    var disclaimerString = '<span id="rouge">Sorry, not accounted by the app...yet</span>';
    switch (newValue) {
        case 0: textsupp ='<strong>Total noob:</strong>  <br>'+disclaimerString;
        break;
        case 1: textsupp ='<strong>Noob:</strong>  off<br>'+disclaimerString;
        break;
    }

    $("#leveldisplay").html(textsupp);
});

/////////////
//SUBMIT FORM
$('#submitbutton').click(function(e) {
    e.preventDefault(); 
    request.done(function(){
        proId=$('#userchosenpromodel option:selected').val();
        proId=parseInt(proId);
        var userLevel = parseInt($('#levelrange').val());

        computeUserDimensions(prodata[proId], userLevel);
        //MOVE TO RESULT PAGE
        $.mobile.changePage($('#result-page'));
    });
});

}); //$(document).ready
4

1 に答える 1

1

初期化とは、動的に追加されたコンテンツを強化するという意味ですか?

これがそうである場合、いくつかの解決策がありますが、私が見ることができることから、あなたはそれをたくさん追加しています. それらのすべてをウィジェットごとに初期化する代わりに、それらをすべて一緒に初期化する方が良い解決策です:

$('#pageContent').trigger('create');

この機能は、動的に追加されたすべてのコンテンツを強化します。フッターとヘッダーにも新しいコンテンツを追加した場合は、次のものを使用します。

$('#pageID').trigger('pagecreate');

最後に、詳細を知りたい場合は、このトピックについて説明している他の回答をご覧ください。通常、ここにはリンクしませんが、実際の例を見つけることができます: jQuery Mobile: Markup Enhancement of dynamic added content

于 2013-05-22T18:45:30.993 に答える