Collapsible タイトルを書き換える(未入力チェック版)

jQuery mobileCollapsible に入力フォームを配置して、Collapsible 折りたたんだ時に
入力の状況を、タイトルに反映させる。

一番簡単な、input タグ、値が空であるかの場合から。
(厳密に、入力フォームの入力変化のチェックは、少し複雑なので
 次回に。。。)


Collapsible のイベントでタイトルを変えるには、タイトル文字列を <h3> <h2> タグで直接囲むと
後で変更できない、
   <div data-role="collapsible" id="userinfo1" data-collapsed="false">
      <h3><span id="title1">User Info</span></h3>

このように、<span>id を付けて、span にタイトルを書く。

HTMLヘッダを以下のように記述して、
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<title>sample.html</title>
<link rel="stylesheet" href="../jquery/jquery.mobile-1.1.0.min.css"/>
<script src="../jquery/jquery-1.7.2.min.js"></script>
<script src="../jquery/jquery.mobile-1.1.0.min.js"></script>
<script src="../js/sample.js"></script>
</head>

この中の sample.js" は、以下のように、

/* titlecheck( タイトルID 
 *           , 未入力時のタイトル 
 *           , 更新入力時のタイトル
 *           , 対象input IDの配列 
 *           , 変更を判定する為の空の連想配列 
 *           , 変更を保持する為の空の連想配列 
 *           );
 */

function titlecheck(titleId,titlePreFix,fary){
   var count = 0;
   $.each(fary,function(i){
      if ($.isArray(fary[i])){
         $.each(fary[i],function(k){
            var type = $('#'+fary[i][k]).attr('type');
            if (type=='radio'||type=='checkbox'){
               if( $('#'+fary[i][k]).attr('checked') == 'checked' ){ count++; }
            }
         });
      }else{
         var tagname = $('#'+fary[i]).get(0).tagName;
         if (tagname=='INPUT'){
            var type = $('#'+fary[i]).attr('type');
            if (type=='text'||type=='password'||type=='number'||type=='search'||type=='tel'
||type=='email'||type=='url'||type=='date'||type=='datetime'||type=='datetime-locale'
||type=='month'||type=='week'||type=='time'){
               if ( $('#'+fary[i]).val() != ''){ count++; }
            }else if(type=='radio'||type=='checkbox'){
               if ( $('#'+fary[i]).attr('checked') == 'checked'){ count++; }
            }
         }else if(tagname=='TEXTAREA'){
            if ( $('#'+fary[i]).val() != ''){ count++; }
         }
      }
   });
   $.each(changeFlags,function(f){
      if (changeFlags[f]){
         count++;
      }
   });
   $('#'+titleId).html(titlePreFix +'('+count+')');
}

これを、呼ぶのには、Collapsible を書いたl後ではなくてならない。

<div data-role="page" id="home" data-theme="c">
   <div data-role="content">
      <div data-role="collapsible-set">
         <div data-role="collapsible" id="userinfo1" data-collapsed="false">
            <h3><span id="title1">User Info</span></h3>
            <div>
               <label for="user1">User</label>
               <input type="text" name="user1" id="user1" value=""/>
            </div>
            <div>
               <label for="passwd1">Password</label>
               <input type="password" name="passwd1" id="passwd1" value=""/>
            </div>
            <div>
               <label for="number1">Number</label>
               <input type="number" name="number1" id="number1" value=""/>
            </div>
            <div>
               <label for="search1">Search</label>
               <input type="search" name="search1" id="search1" value=""/>
            </div>
         </div>
         <div data-role="collapsible" id="userinfo2">
            <h3><span id="title2">User Info</span></h3>
            <div>
               <label for="user2">User</label>
               <input type="text" name="user2" id="user2" value=""/>
            </div>
            <div>
               <label for="passwd2">Password</label>
               <input type="password" name="passwd2" id="passwd2" value=""/>
            </div>
            <div>
               <label for="number2">Number</label>
               <input type="number" name="number2" id="number2" value=""/>
            </div>
            <div>
               <label for="search2">Search</label>
               <input type="search" name="search2" id="search2" value=""/>
            </div>
         </div>
      </div>
<script type="text/javascript">

var fieldAry1 = ['user1','passwd1','number1','search1'];
$('#userinfo1').bind('expand',function(){
   titlecheck('title1','User1  Info ',fieldAry1);
}).bind('collapse', function () {
   titlecheck('title1','User1  Info ',fieldAry1);
});

var fieldAry2 = ['user2','passwd2','number2','search2'];
$('#userinfo2').bind('expand',function(){
   titlecheck('title2','User2  Info ',fieldAry2);
}).bind('collapse', function () {
   titlecheck('title2','User2  Info ',fieldAry2);
});

</script>
   </div>
</div>

以下のように、、開いてから任意に入力して


2番目の Collapsible をクリックすると、、