2012-10-10 12 views
9

दिखाने के बाद छुपाता है मेरे पास jquery मोबाइल और रीढ़ की हड्डी के साथ एक छोटा फोनगैप एप्लिकेशन है। मैं मैन्युअल रूप से .popup() विधि को कॉल करके उपयोगकर्ता को पॉपअप दिखाने की कोशिश कर रहा हूं।jQuery.mobile पॉपअप तुरंत

सबकुछ आईओएस पर ठीक काम करता है लेकिन एंड्रॉइड पर मुझे अजीब समस्या मिली: पॉपअप कुछ पलों के लिए दिखा रहा है और गायब होने से।

यहाँ वास्तविक कोड:

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

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

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

मैं इतिहास का उपयोग कर रहा: झूठी क्योंकि इस पॉपअप उपपृष्ठ का वास्तव में हिस्सा है। कोड बहुत सरल दिखता है, मैं समझ नहीं पा रहा हूं कि यह गायब क्यों हो सकता है, और यह केवल एंड्रॉइड उपकरणों पर क्यों होता है।

धन्यवाद, और मेरी बुरी अंग्रेजी के लिए खेद है।

उत्तर

0

एंड्रॉइड 2.3 डिवाइस (मूल ब्राउज़र और फ़ायरफ़ॉक्स दोनों में) पॉपअप ('ओपन') का उपयोग करने का प्रयास करते समय मुझे एक ही समस्या है और यह अन्य उपकरणों पर ब्राउज़रों पर बस ठीक काम करता है। मैं अपने पॉपअप को खोलने के लिए रीढ़ की हड्डी इवेंट मैनेजमेंट का भी उपयोग कर रहा हूं (टैप इवेंट का इस्तेमाल किया और पॉपअप के लिए कोई ऐडिशननल विकल्प नहीं)।

मैंने समस्या को 'सही' करने के लिए क्या किया है यह है कि मैंने इस घटना के लिए रीढ़ की हड्डी घटना प्रबंधन को हटा दिया और रेंडर फ़ंक्शन में श्रोता जोड़ा। आपके मामले में यह कुछ इस तरह दिखेगा:

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 मोबाइल के बीच कुछ असंगति होना चाहिए) यह कामकाज मेरे ऐप किसी भी डिवाइस पर ठीक काम करने लगता है।

संपादित करें: ओह, यह पता चला है कि मेरे मामले में समस्या थी कि मैं "झूठी वापसी" लापता था; घटना से निपटने के समारोह में। अब जब मैंने इसे जोड़ा, यह रीढ़ की हड्डी घटना प्रबंधन के साथ सही ढंग से काम करता है। अफसोस की बात यह नहीं बताती कि आपको समस्या क्यों है और मैं इसे केवल एंड्रॉइड पर क्यों देख रहा था।

4

मैंने इस समस्या को ठीक करने के लिए घंटों बिताए।

अंत में मैंने समस्या को ठीक करने के लिए निम्नलिखित दो चीजें करनी शुरू कर दीं।

1 - असंपीड़ित jqm फ़ाइल का उपयोग करें। i.e jquery.mobile.1.2.0.js

2 - मैं 'टैप' विकल्प का उपयोग करके प्रोग्रामिंग रूप से पॉपअप को ट्रिगर कर रहा था - एक बार यह 'क्लिक' विकल्प में बदल गया था।

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

मैं बैकबोन का उपयोग नहीं कर रहा हूं और मेरे ऐप में समस्या आईओएस' (6.0.1) पर सामने आई है, एंड्रॉइड (4.0.3) नहीं (jQuery मोबाइल संस्करण 1.2 है)। मुझे केवल चरण 2 की आवश्यकता है - इसे 'क्लिक करें' ईवेंट पर स्विच करना - इसे हल करने के लिए। एक वैकल्पिक समाधान जो मेरे लिए काम करता था - मुझे टच इवेंट के साथ चिपकने की इजाजत देता था - इवेंट हैंडलर की शुरुआत में ईवेंट ऑब्जेक्ट पर 'preventDefault()' को कॉल करना था, जो अंततः 'पॉपअप (' ओपन ')' कहता था। – mklement0

+0

यह समस्या अभी भी JQueryMobile 1.4.5 में दिखाई देती है - 'टैब' से 'क्लिक' में बदलना भी मेरे लिए हल हो गया है। – Barsum

0

मामले में यह किसी को भी मदद करता है, मैं, बिंग मैप्स के साथ होने वाली Microsoft.Maps.Events.addHandler(pin, 'click', callback) विधि के साथ एक ही समस्या थी।

विशेष रूप से अच्छा नहीं है, लेकिन बजाय मैं pushpin._id में एक आईडी संग्रहीत और निम्नलिखित किया:

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

मैं क्लिक करें घटना के लिए मेरे .tap() की घटनाओं को बदलने की तरह महसूस नहीं किया था और मैंने नहीं किया एक ऐसा मामला है जहां मैं preventDefault() का उपयोग कर सकता था, इसलिए मैंने पॉपअप ('ओपन') लाइन में एक टाइमआउट जोड़ा। Jqm में मेरा होवरडेले 150 पर सेट है इसलिए मैंने सुरक्षित समय पर बस इस टाइमआउट को 600 पर सेट किया है। ठीक काम करता है, उपयोगकर्ता के लिए सुस्त महसूस नहीं करता है।

3

मैंने इस समस्या को ठीक करने के लिए घंटों बिताए।

अंत में मैंने समस्या को ठीक करने के लिए निम्नलिखित दो चीजें करनी शुरू कर दीं।

इस कोड स्निपेट आप मदद कर सकते हैं ->

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

कृपया ध्यान दें मैं e.perventDefault().

1

एक तरह से 'फिक्स' करने के लिए इस्तेमाल किया है यह पॉपअप div

देखें पर data-history="false" की स्थापना भी कर रहा है यह प्रश्न

JQuery Mobile popup with history=false autocloses

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 बाध्यकारी आग में विफल रहता है आईफोन पर 4 आधा समय।

संबंधित मुद्दे