1. 程式人生 > >使用jquery mobile Collapsible Widget 時繫結expand,collapse事件監聽器的方法

使用jquery mobile Collapsible Widget 時繫結expand,collapse事件監聽器的方法

根據官方文件,expand事件監聽由expand(event,ui)來實現

expand( event, ui )Type: collapsibleexpand

Triggered when a collapsible is expanded 繫結event listener(事件監聽器)到collapsibleexpand event的程式碼如下。
1 $( ".selector" ).on( "collapsibleexpand", function( event, ui ) {} );
假設我現在想在每個head 發生expand事件時改變字型顏色為red,其他時間的顏色保持為rgb(51,51,51);

html程式碼如下

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>collapsible demo</title>
  <link rel="stylesheet" href="//code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.css">
  <script src="//code.jquery.com/jquery-1.10.2.min.js"></script>
  <script src="//code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.js"></script>
</head>
<body>
 
<div data-role="page" id="page1">
  <div data-role="header">
    <h1>jQuery Mobile Example</h1>
  </div>
  <div role="main" class="ui-content">
      <div data-role="collapsibleset" data-theme="a" data-content-theme="a">
          <div data-role="collapsible">
              <h3>Section 1</h3>
              <p>I'm the collapsible content for section 1</p>
          </div>
          <div data-role="collapsible">
              <h3>Section 2</h3>
              <p>I'm the collapsible content for section 2</p>
          </div>
          <div data-role="collapsible">
              <h3>Section 3</h3>
              <p>I'm the collapsible content for section 3</p>
          </div>
      </div>
  </div>
</div>
 
</body>
</html>

效果如圖

我們可以用這樣實現。

1.先在data-role="collapsible"的div上新增class標記:class="expand",程式碼如下(紅色為新增部分)


<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>collapsible demo</title>
  <link rel="stylesheet" href="//code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.css">
  <script src="//code.jquery.com/jquery-1.10.2.min.js"></script>
  <script src="//code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.js"></script>
</head>
<body>
 
<div data-role="page" id="page1">
  <div data-role="header">
    <h1>jQuery Mobile Example</h1>
  </div>
  <div role="main" class="ui-content">
      <div data-role="collapsibleset" data-theme="a" data-content-theme="a">
          <div data-role="collapsible" class="expand"
> <h3>Section 1</h3> <p>I'm the collapsible content for section 1</p> </div> <div data-role="collapsible" class="expand"> <h3>Section 2</h3> <p>I'm the collapsible content for section 2</p> </div> <div data-role="collapsible" class="expand"> <h3>Section 3</h3> <p>I'm the collapsible content for section 3</p> </div> </div> </div> </div> </body> </html>

2.在collapse執行過程中jquer會在<h3>內部新增<a>,如圖

<h3 class="ui-collapsible-heading ui-collapsible-heading-collapsed"><a href="#" class="ui-collapsible-heading-toggle ui-btn ui-btn-icon-left ui-btn-a ui-icon-plus" style="color: red;">Section 1<span class="ui-collapsible-heading-status"> click to expand contents</span></a></h3>

因此我們要控制a.ui-collapsible-heading-toggle的開改變字型顏色,js程式碼如下

$( ".expand" ).on( "collapsibleexpand", function( event, ui ) {
            $('a.ui-collapsible-heading-toggle').css({"color":"rgb(51,51,51)"});
            $('a.ui-collapsible-heading-toggle',this).css({"color":"red"});
        } );

邏輯是:

當某個class為.expand的div 展開的時候,改變所有a.ui-collapsible-heading-toggle的css為

({"color":"rgb(51,51,51)"})

$('a.ui-collapsible-heading-toggle').css({"color":"rgb(51,51,51)"});

並改變當前(this)的顏色為red

$('a.ui-collapsible-heading-toggle',this).css({"color":"red"});

這個時候,只要你點選任意一個head,字型顏色就會變成紅色。

效果如圖所示


3.現在。我們要保持當headcollapse的時候,字型保持rgb(51,51,51).可以修改原來js程式碼為一下程式碼:


$( ".expand" ).on( "collapsibleexpand", function( event, ui ) {
            $('a.ui-collapsible-heading-toggle').css({"color":"rgb(51,51,51)"});
            $('a.ui-collapsible-heading-toggle',this).css({"color":"red"});
        } ).on( "collapsiblecollapse", function( event, ui ) {
            $('a.ui-collapsible-heading-toggle').css({"color":"rgb(51,51,51)"});
        } );
便可以實現expand的時候字型變成red,collapse的時候字型變為rgb(51,51,51)

效果如圖


問題:
由於增加的事件

.on( "collapsiblecollapse", function( event, ui ) {
            $('a.ui-collapsible-heading-toggle').css({"color":"rgb(51,51,51)"});
        } );


會把所有的a.ui-collapsible-heading-toggle的css修改,
有因為每個head在expand的時候,其他之前已經expand的head會collapse,這樣會導致一個問題,那就是另外一個head在collapse的時候改變了所有的a.ui-collapsible-heading-toggle的css,這就使得在不同的head間跳轉的時候都會觸發collapse並改變所有的heading-toggle的字型顏色。
因此我們要讓head 在collapse的時候只修改自己的css,也就是把程式碼修改為

.on( "collapsiblecollapse", function( event, ui ) {
            $('a.ui-collapsible-heading-toggle',this).css({"color":"rgb(51,51,51)"});
        } );


這樣就可以保證了其他head的css不被改變。
從而實現在head間跳轉的時候,字型都會改變顏色。