2012-06-19 36 views
2

我認爲這是與JQM pagebeforechange and event source相同的問題,但是在那裏沒有確定的答案。確定jQuery Mobile的pagebeforechange事件的調用者

有誰知道如何獲取觸發事件的對象?

$(document).bind("pagebeforechange", function (event , data) { 
    //event is triggered from an anchor tag... 
    //Is it possible to get reference to anchor here? 
}); 

謝謝。

富勒例如:

<div data-role="page" id="ANGRY"> 
<div data-role="header"> 
    Solo Questions</div> 
<div data-role="content"> 
    <fieldset data-role="controlgroup"> 
     <legend>Since your last scheduled prompt, how <strong>angry</strong> have you felt?</legend> 
     <input type="radio" name="ANGRY" value="1" id="ANGRY1" /> 
     <label for="ANGRY1"> 
      None</label> 
     <input type="radio" name="ANGRY" value="2" id="ANGRY2" /> 
     <label for="ANGRY2"> 
      Some</label> 
     <input type="radio" name="ANGRY" value="3" id="ANGRY3" /> 
     <label for="ANGRY3"> 
      A Lot</label> 
    </fieldset> 
</div> 
<div class="ui-grid-a"> 
    <div class="ui-block-a"> 
     <a href="#HAPPY" data-role="button" data-icon="arrow-l" data-iconpos="left">prev</a></div> 
    <div class="ui-block-b"> 
     <a href="#IRRITABL" data-role="button" data-icon="arrow-r" data-iconpos="right">next</a></div> 
</div> 
</div> 

我希望能夠確定是什麼觸發了pagebeforechange盛會 - 「上一頁」按鈕或「下一步」按鈕。這樣做的目的是在移到下一頁之前執行驗證,但在返回到上一頁時不會執行驗證。

+0

在檢查返回的事件和數據對象並搜索jQuery Mobile的github時,看起來這是不可能的。我將只修改href來調用一個javascript函數,然後執行$ .mobile.changePage()。如果有人有任何其他想法,我很樂意聽到他們。 – Calvin

回答

0

toPage是否適用於此?

JS

$(document).bind("pagebeforechange", function (event , data) { 
    console.log('To Page: '+data.toPage); 
});​ 

HTML

<div data-role="page" id="home"> 
    <p>Open up the console and Click the Info link</p> 
    <ul> 
     <li><a href="#info">Info</a></li> 
    </ul> 
</div> 

<div data-role="page" id="info"> 
    <ul> 
     <li><a href="#home">Home</a></li> 
    </ul> 
</div>​ 
+0

我看到你在說什麼 - 使用toPage來確定哪一個被點擊。不幸的是,對於我的情況,toPage不會給我足夠的信息,因爲我有很多帶有prev和next按鈕的頁面。因此,下一個按鈕的toPage也是prev按鈕的toPage。 – Calvin

0

這是不太優雅,我寧願,但它適合我的解決方案(我認爲您的解決方案)。 jQuery在調用任何page事件(如pagebeforechange)之前調用任何click事件。我只是強迫我的錨元素將他們的ID附加到他們的data-role="page"容器中。

第一:

$('a[href="#ce"]').on('click',function(){ 
    $(this).closest('div[data-role="page"]').attr('data-caller',$(this).attr('id')); 
}); 
我現在用的 data-caller,以確定哪些錨剛剛點擊

下一頁:

$(document).on('pagebeforechange',function(event,data){ 
    //makes sure that a valid link is actually clicked and ignores init 
    if (data.toPage.toString().indexOf('#')>-1 && $(data.options.fromPage).attr('data-url')!==undefined){ 
      //Determines which page jqm is changing to 
      if(data.toPage.split('#')[1]=='ce'){ 
       switch($('#'+_from).attr('data-caller')){ 
        case 'ID_of_anchor_1': 
         //UNIQUE CODE FOR ANCHOR 1 
         break; 
        case 'ID_of_anchor_2': 
         //UNIQUE CODE FOR ANCHOR 2 
         break; 
       } 
      } 
     } 
    }); 

最後,根據您的新頁面上,你可能想再次刪除您data-direction=「reverse」所以它不小心叫data-caller屬性。