1

ポップアップ内に 3 つのタブがあります。どのハイパーリンクがクリックされるかによって、特定のタブをアクティブにするために移動したいと思います。

必須ではないコードをすべて取り除いたので、ハイパーリンクに「ui-btn」クラスが適用されていると失敗するようです。リンクのスタイルが設定されていない場合は、正常に機能します。 正しいタブが選択されますが、ナビゲーション バーのリンクがアクティブ/強調表示されません。

誰もこれに光を当てることができますか? または簡単な回避策。

JSFiddleデモをご覧ください

HTML

<div data-role="popup" id="CC_dayformPopup" data-history="false" data-dismissible="false">

<main class="ui-content">
<form action="" method="post" id="CC_dayform" data-ajax="false">

<div data-role="tabs" id="tabs">
  <div data-role="navbar">Type:
    <ul>
      <li><a href="#CC_OO_tab" data-ajax="false" id="CC_OO_tab_link">OO</a></li>
      <li><a href="#CC_CLO_tab" data-ajax="false" id="CC_CLO_tab_link">CLO</a></li>
      <li><a href="#CC_DO_tab" data-ajax="false" id="CC_DO_tab_link">DO</a></li>
    </ul>
  </div>

  <div id="CC_OO_tab">
        <div class="ui-field-contain">
            <fieldset data-role="controlgroup">
                <input type="checkbox" name="OO_req" id="CC_OO_req" />
                <label for="CC_OO_req">OO</label>
            </fieldset>
        </div>
    </div>

  <div id="CC_CLO_tab">
        <div class="ui-field-contain">

            <fieldset data-role="controlgroup">
            <input type="checkbox" name="CLO_req" id="CC_CLO_req" />
            <label for="CC_CLO_req">CLO</label>
            </fieldset>
        </div>

    </div>
    <div id="CC_DO_tab">
        <div class="ui-field-contain">
            <fieldset data-role="controlgroup">
                <input type="checkbox" name="DO_req" id="CC_DO_req" />
                <label for="CC_DO_req">DO</label>
            </fieldset>
        </div>
</div>

<fieldset data-role="controlgroup" data-type="horizontal" class="ui-mini">
<button type="submit" form="CC_dayform">Save</button>
<a href="#" data-rel="back" onclick="document.getElementById('CC_dayform').reset();" class="ui-btn ui-corner-all ui-shadow ui-btn-a">Cancel</a>
</fieldset>

</form>
</main>
</div>



These don't work...
<a href="#CC_dayformPopup" data-rel="popup" data-transition="pop" onclick="editDayform('1','on','','');" class="ui-btn ui-btn-a ui-btn-inline">OO chosen</a> 
<a href="#CC_dayformPopup" data-rel="popup" data-transition="pop" onclick="editDayform('1','','on','');" class="ui-btn ui-btn-a ui-btn-inline">CLO chosen</a> 
<a href="#CC_dayformPopup" data-rel="popup" data-transition="pop" onclick="editDayform('1','','','on');" class="ui-btn ui-btn-a ui-btn-inline ">DO Chosen</a>
As they're 'ui-btn'
<br />
These work--><a href="#CC_dayformPopup" data-rel="popup" data-transition="pop" onclick="editDayform('1','on','','');" >OO chosen</a> 
<a href="#CC_dayformPopup" data-rel="popup" data-transition="pop" onclick="editDayform('1','','on','');">CLO chosen</a> 
<a href="#CC_dayformPopup" data-rel="popup" data-transition="pop" onclick="editDayform('1','','','on');">DO Chosen</a> as they have no 'ui-btn'

Jクエリ

function editDayform(day, OO, CLO, DO) {
  if (OO == 'on') {
    $('#CC_OO_tab_link').trigger('click');
  } else if (CLO == 'on') {
    $('#CC_CLO_tab_link').trigger('click');
  } else if (DO == 'on') {
    $('#CC_DO_tab_link').trigger('click');
  }
  if (OO == 'on') {
    $('#CC_OO_req').prop('checked', true).checkboxradio('refresh');
  }
  if (CLO == 'on') {
    $('#CC_CLO_req').prop('checked', true).checkboxradio('refresh');
  }
  if (DO == 'on') {
    $('#CC_DO_req').prop('checked', true).checkboxradio('refresh');
  }
  return true;
}
4

1 に答える 1

1

まずあなたの問題の解決策。
舞台裏で正確に何が起こっているのかはわかりません。ただし、jquery-mobile ボタンをクリックする.ui-btnと、jquery-mboile は.ui-btn-activeページ上の他のすべてのボタンから削除し、クリックされたボタンを強調表示します。これには少し時間がかかります。ただし、jquery-mobile がすべての削除を完了する前に、タブで「クリックされた」イベントをすぐにトリガーしています.ui-btn-active
遅延$('#CC_OO_tab_link').trigger('click');して1ミリ秒で十分な場合は、機能します。コード スニペットを参照してください

	function editDayform(day, OO, CLO, DO) {
	  if (OO == 'on') {

	    setTimeout(function() {
	      $('#CC_OO_tab_link').trigger('click');
	    }, 1);

	  } else if (CLO == 'on') {
	    setTimeout(function() {
	      $('#CC_CLO_tab_link').trigger('click');
	    }, 1);


	  } else if (DO == 'on') {
        setTimeout(function() {
	      $('#CC_DO_tab_link').trigger('click');
	    }, 1);
	  }
	  if (OO == 'on') {
	    $('#CC_OO_req').prop('checked', true).checkboxradio('refresh');
	  }
	  if (CLO == 'on') {
	    $('#CC_CLO_req').prop('checked', true).checkboxradio('refresh');
	  }
	  if (DO == 'on') {
	    $('#CC_DO_req').prop('checked', true).checkboxradio('refresh');
	  }
	  return true;
	}
<!-- jQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<!-- jQuery Mobile -->
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jquerymobile/1.4.5/jquery.mobile.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquerymobile/1.4.5/jquery.mobile.min.js"></script>

<div data-role="popup" id="CC_dayformPopup" data-history="false" data-dismissible="false">

  <main class="ui-content">
    <form action="" method="post" id="CC_dayform" data-ajax="false">

      <div data-role="tabs" id="tabs">
        <div data-role="navbar">
          Type:
          <ul>
            <li>
              <a href="#CC_OO_tab" data-ajax="false" id="CC_OO_tab_link">OO</a>
            </li>
            <li>
              <a href="#CC_CLO_tab" data-ajax="false" id="CC_CLO_tab_link">CLO</a>
            </li>
            <li>
              <a href="#CC_DO_tab" data-ajax="false" id="CC_DO_tab_link">DO</a>
            </li>
          </ul>
        </div>

        <div id="CC_OO_tab">
          <div class="ui-field-contain">
            <fieldset data-role="controlgroup">
              <input type="checkbox" name="OO_req" id="CC_OO_req" />
              <label for="CC_OO_req">OO</label>
            </fieldset>
          </div>
        </div>

        <div id="CC_CLO_tab">
          <div class="ui-field-contain">

            <fieldset data-role="controlgroup">
              <input type="checkbox" name="CLO_req" id="CC_CLO_req" />
              <label for="CC_CLO_req">CLO</label>
            </fieldset>
          </div>

        </div>
        <div id="CC_DO_tab">
          <div class="ui-field-contain">
            <fieldset data-role="controlgroup">
              <input type="checkbox" name="DO_req" id="CC_DO_req" />
              <label for="CC_DO_req">DO</label>
            </fieldset>
          </div>
        </div>

        <fieldset data-role="controlgroup" data-type="horizontal" class="ui-mini">
          <button type="submit" form="CC_dayform">
            Save
          </button>
          <a href="#" data-rel="back" onclick="document.getElementById('CC_dayform').reset();" class="ui-btn ui-corner-all ui-shadow ui-btn-a">Cancel</a>
        </fieldset>

    </form>
  </main>
  </div>

  These don't work...
  <a href="#CC_dayformPopup" data-rel="popup" data-transition="pop" onclick="editDayform('1','on','','');" class="ui-btn ui-btn-a ui-btn-inline">OO chosen</a>
  <a href="#CC_dayformPopup" data-rel="popup" data-transition="pop" onclick="editDayform('1','','on','');" class="ui-btn ui-btn-a ui-btn-inline">CLO chosen</a>
  <a href="#CC_dayformPopup" data-rel="popup" data-transition="pop" onclick="editDayform('1','','','on');" class="ui-btn ui-btn-a ui-btn-inline ">DO Chosen</a>
  As they're 'ui-btn'
  <br />These work--><a href="#CC_dayformPopup" data-rel="popup" data-transition="pop" onclick="editDayform('1','on','','');">OO chosen</a>
  <a href="#CC_dayformPopup" data-rel="popup" data-transition="pop" onclick="editDayform('1','','on','');">CLO chosen</a>
  <a href="#CC_dayformPopup" data-rel="popup" data-transition="pop" onclick="editDayform('1','','','on');">DO Chosen</a> as they have no 'ui-btn'


しかし、あなたのコードは非常に奇妙に見え、コードの匂いがたくさんあります。

最初:onclick()あなたのリンクのすべて。それらを削除し、代わりにイベントをボタンにバインドする必要があります。
ボタンを .dayformButton というクラスに追加し、カスタム データ属性 data-dayorm="" を追加しました。次に、クラス dayformButton にクリック イベントをバインドします。このイベントが発生した場合は、どのボタンがクリックされたか (data-dayform 属性を使用) を確認し、この属性を var に保存して、ポップアップ イベント リスナーで使用できるようにします。

JQuery-mobile は、すべてのウィジェットに対してさまざまなイベントを提供します。この場合、ポップアップからイベントを取得できます。バインドする最初のイベントはbeforeposition.

ポップアップが表示される座標を計算する前にトリガーされます

ポップアップが画面に表示される前に、右側のタブでクリック イベントをトリガーし、右側のチェックボックスをオンにします。に変更beforepositionするafteropenと、ポップアップが開いた直後にチェックボックスとタブがアクティブになっていることがわかります。

そして最後のステップで、ポップアップが閉じられたときにイベントをバインドします。jquery-mobile イベントafterclose

ポップアップが完全に閉じたときにトリガーされます

ポップアップが閉じられた後、このイベントを使用してフォームをリセットします。onclickこのようにして、html から最後を削除します。

editDayform 関数も非常に奇妙に見えます。あなたは自分自身を繰り返しています。IDが異なるだけで、同じことを3回行っています。簡単な方法は、id を渡された値に変更することです。このようにして、これらすべての if と else を取り除きます。

	 // Set a global var
	var dayform = null;

	 // Bind a Click Event
	$(".dayformButton").on('click', function() {
	  // Which Button is clicked and set the global Var to this value
	  dayform = $(this).data('dayform');
	  console.log("Clicked: " + dayform);
	});

	 // Bind Events to the popup
	$("#CC_dayformPopup").popup({
	  beforeposition: function(event, ui) {
	    // Select the matching tab and check the checkbox
	    $('#CC_' + dayform + '_req').prop('checked', true).checkboxradio('refresh');
	    $('#CC_' + dayform + '_tab_link').trigger('click');
	  },

	  afterclose: function(event, ui) {
	    console.log("Popup closed");

	    // Reset the form when the popup is closed
	    $('#CC_dayform').trigger("reset");
	  }


	});
<!-- jQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<!-- jQuery Mobile -->
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jquerymobile/1.4.5/jquery.mobile.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquerymobile/1.4.5/jquery.mobile.min.js"></script>

<div data-role="popup" id="CC_dayformPopup" data-history="false" data-dismissible="false">

  <main class="ui-content">
    <form action="" method="post" id="CC_dayform" data-ajax="false">

      <div data-role="tabs" id="tabs">
        <div data-role="navbar">
          Type:
          <ul>
            <li>
              <a href="#CC_OO_tab" data-ajax="false" id="CC_OO_tab_link">OO</a>
            </li>
            <li>
              <a href="#CC_CLO_tab" data-ajax="false" id="CC_CLO_tab_link">CLO</a>
            </li>
            <li>
              <a href="#CC_DO_tab" data-ajax="false" id="CC_DO_tab_link">DO</a>
            </li>
          </ul>
        </div>

        <div id="CC_OO_tab">
          <div class="ui-field-contain">
            <fieldset data-role="controlgroup">
              <input type="checkbox" name="OO_req" id="CC_OO_req" />
              <label for="CC_OO_req">OO</label>
            </fieldset>
          </div>
        </div>

        <div id="CC_CLO_tab">
          <div class="ui-field-contain">

            <fieldset data-role="controlgroup">
              <input type="checkbox" name="CLO_req" id="CC_CLO_req" />
              <label for="CC_CLO_req">CLO</label>
            </fieldset>
          </div>

        </div>
        <div id="CC_DO_tab">
          <div class="ui-field-contain">
            <fieldset data-role="controlgroup">
              <input type="checkbox" name="DO_req" id="CC_DO_req" />
              <label for="CC_DO_req">DO</label>
            </fieldset>
          </div>
        </div>

        <fieldset data-role="controlgroup" data-type="horizontal" class="ui-mini">
          <button type="submit" form="CC_dayform">
            Save
          </button>
          <a href="#" data-rel="back" class="ui-btn ui-corner-all ui-shadow ui-btn-a">Cancel</a>
        </fieldset>

    </form>
  </main>
  </div>

  <a href="#CC_dayformPopup" data-rel="popup" data-transition="pop" data-dayform="OO" class="dayformButton ui-btn ui-btn-a ui-btn-inline">OO chosen</a>
  <a href="#CC_dayformPopup" data-rel="popup" data-transition="pop" data-dayform="CLO" class="dayformButton ui-btn ui-btn-a ui-btn-inline">CLO chosen</a>
  <a href="#CC_dayformPopup" data-rel="popup" data-transition="pop" data-dayform="DO" class="dayformButton ui-btn ui-btn-a ui-btn-inline ">DO Chosen</a>

于 2016-02-17T02:28:37.620 に答える