2012-06-22 2 views
6

jquery-mobileが持っているカスタム・マルチ・セレクト・コントロールが好きで使いたい。だから、put-data = role = "none"を提案しないでください。しかし、オプションのリストが長いと、選択リストのデフォルトの動作を新しいダイアログウィンドウで開くことは望ましくありません。jquerymobileのダイアログ・ビューが表示されないようにする大規模なオプション・リストを持つマルチ・セレクト・コントロール

理由私はその動作がipadでうまく動作していないことを望んでいません。ダイアログの左側にある「X」を使用して閉じることは難しくなります。何らかの理由で、ipadで応答しなくなってきていますが、デスクトップで正常に動作します。

答えて

8

jqueryのモバイルJavaScriptに深く掘り下げて、このマルチスクリーンリストの決定がマルチ選択リストのどこにあるのかを知ることは苦労しました。このコードは、私がそれを避けるように設定できるようなフラグはないことを私に伝えます。それはリスト(menuHeight)の高さに依存しているので、私のリストのサイズが減少したように、

しかし、私のために働いた修正は、いくつかのCSSの変更(各リスト項目の減少パディング)を作ることだった。

.ui-selectmenu-list li .ui-btn-inner a.ui-link-inherit 
{ 
    padding: .5em 15px .5em 15px;  
} 

ダイアログを表示しないようにしておきたい場合は、jqueryモバイルコードのローカルコピーにいくつかのオーバーライドを入れることです(これは嫌いですが、これが唯一の方法です)。

//TODO: vishalkumar : I can override here by replacing below line by if (false)   
if (menuHeight > screenHeight - 80 || !$.support.scrollTop) { 

       self.menuPage.appendTo($.mobile.pageContainer).page(); 
       self.menuPageContent = menuPage.find(".ui-content"); 
       self.menuPageClose = menuPage.find(".ui-header a"); 

       // prevent the parent page from being removed from the DOM, 
       // otherwise the results of selecting a list item in the dialog 
       // fall into a black hole 
       self.thisPage.unbind("pagehide.remove"); 

       //for WebOS/Opera Mini (set lastscroll using button offset) 
       if (scrollTop == 0 && btnOffset > screenHeight) { 
        self.thisPage.one("pagehide", function() { 
         $(this).jqmData("lastScroll", btnOffset); 
        }); 
       } 

       self.menuPage.one("pageshow", function() { 
        focusMenuItem(); 
        self.isOpen = true; 
       }); 

       self.menuType = "page"; 
       self.menuPageContent.append(self.list); 
       self.menuPage.find("div .ui-title").text(self.label.text()); 
       $.mobile.changePage(self.menuPage, { 
        transition: $.mobile.defaultDialogTransition 
       }); 
      } 
+0

私は同様の欲求を持っていましたが、これを行うより良い方法はありません。私は複数の選択リスト(これは私が自分のデータを保存している場所である)でpopupaftercloseイベントを処理する必要があります。ただし、このイベントは、ポップアップモードで表示されているときにのみ発生しますが、ページモードでは表示されません。このようなケースを処理するためのより良いアイデアですか? – scuba88