2012-10-10 109 views
9

我有一個jquery mobile和backbone的小手機應用程序。 我試圖通過手動調用.popup()方法來向用戶顯示彈出窗口。jQuery.mobile彈出後立即隱藏顯示

一切正常iOS上,但在Android上我得到了奇怪的問題:彈出窗口顯示了片刻,不是消失。

這裏的實際代碼:

var PostView = Backbone.View.extend({ 
    events: { 
    'touchend .add-comment-button': 'addComment' 
    }, 
    addComment: function() { 

    this.$(".comment-popup").popup('open', { history: false }); 

    return false; // Stop bubbling. 
    } 
}); 

我使用的歷史:假的,因爲這個彈出的子頁面actualy一部分。代碼看起來很簡單,我只是不明白爲什麼它可以消失,以及爲什麼這隻發生在Android設備上。

謝謝,對不起我的英語不好。

回答

0

的Android 2.3的設備上時,試圖使用彈出(「開放」)我有完全相同的問題(無論是在本地瀏覽器,並在Firefox)和它的作品只是罰款在其他設備上的瀏覽器。我還使用骨幹事件管理來打開我的彈出窗口(使用輕擊事件並且沒有彈出選項)。

我所做的'糾正'的問題是,我刪除了此事件的骨幹事件管理並在渲染函數中添加了一個偵聽器。在你的情況,這將是這個樣子:

events: { 
     // 'touchend .add-comment-button': 'addComment' 
    }, 
    render: function() { 
      $(this.el).html(this.template(this.model)); 
      $(this.el).find('.add-comment-button').tap(function(el){ 
       this.addComment(el); 
       return false; 
      }.bind(this)); 
    } 

我不知道問題出在哪裏來自(必須是骨幹和jQuery移動之間的一些不兼容),爲什麼我們只看到它在Android,但在目前與這個解決方法我的應用似乎在任何設備上都能正常工作。

編輯:哎呀,事實證明,在我的情況下,問題是我錯過了「返回false;」在處理事件的函數中。 現在我添加了它,它可以與骨幹事件管理一起正常工作。 不幸的是,這並不能解釋爲什麼你有這個問題,爲什麼我只在android上看到它。

4

我花了數小時試圖解決這個問題。

最後我落得這樣做,似乎解決問題以下兩件事情。

1 - 使用未壓縮的jqm文件。即jquery.mobile.1.2.0.js

2 - 我用'tap'選項以編程方式觸發彈出 - 一旦改變爲'click'選項,它就起作用了。

$('.option').live('click', function() { 
    $('#popup-div').popup('open'); 
}); 
+0

我沒有使用Backbone,而在我的應用程序中,問題出現在iOS(6.0.1),而不是Android(4.0.3)(jQuery Mobile版本是1.2)上。我只需要第2步 - 切換到「點擊」事件來解決它。爲我工作的另一種解決方案 - 允許我堅持使用觸摸事件 - 在最終調用'popup('open')'的事件處理程序的開始事件對象上調用preventDefault()'。 – mklement0

+0

這個問題仍然出現在JQueryMobile 1.4.5 - 從'tab'改爲'click'也爲我解決了它。 – Barsum

0

在情況下,它可以幫助任何人,我有同樣的問題與Bing地圖出現,與Microsoft.Maps.Events.addHandler(pin, 'click', callback)方法。

不是特別漂亮,而是我存儲在pushpin._id的ID,並做了以下內容:

$("#page").on('vclick', function (event) { 
    if (event.target.parentElement.className === "MapPushpinBase") { 
     $("#stopPopup").popup('open'); 
    } 
}); 
1

我不喜歡改變我.tap()事件的單擊事件,我沒有有一種情況我可以使用preventDefault(),所以我只是給彈出窗口('open')添加了一個超時。我在jqm中的hoverdelay設置爲150,所以我將這個超時設置爲600,以保證安全。工作正常,對用戶不感覺遲緩。

3

我花了幾個小時試圖解決這個問題。

最後我落得這樣做,似乎解決問題以下兩件事情。

此代碼段可以幫助你 - >

$('#testBtn').on('tap',function(e){ 
    console.log("button clicked"); 
    e.preventDefault(); 
    $('#testPOPUP').popup("open"); 
}); 

請注意我用e.perventDefault().

0

一個蠻力選項是check whether popup was hidden並重新打開它。

在循環中,因爲彈出窗口隱藏的確切時間似乎有所不同。

var hidden = $('#' + id + '-popup') .hasClass ('ui-popup-hidden') 
if (hidden) $('#' + id) .popup ('open') 

工作的示例:http://jsfiddle.net/ArtemGr/hgbdv9s7/

另一種選擇可能是綁定到popupafterclose

var reopener = function() {$('#' + id) .popup ('open')} 
$('#' + id) .on ('popupafterclose', reopener) 
$('#' + id) .popup ('open') 

喜歡這裏:http://jsfiddle.net/ArtemGr/gmpczrdm/

但由於某些原因,popupafterclose結合不火在iPhone 4的一半時間。