2011-11-22 18 views
9

मेरे पास एक ऐसा फ़ंक्शन है जो उस पर क्लिक करते समय मेनू दिखाता है, और मैं इसे 5 सेकंड के बाद गायब करना चाहता हूं। यह मेरा जावास्क्रिप्ट है - यह डेस्कटॉप ब्राउज़र पर ठीक से काम करता है लेकिन यह मोबाइल पर गायब नहीं होता है।setTimeout सफारी मोबाइल पर काम नहीं कर रहा है

$(function() { 
    $('#prod_btn').click(function() { 
     $(this).addClass('selected').next('ul').css('display', 'block'); 
     setTimeout(hideMenu, 5000); 
    }); 
}); 

function hideMenu() { 
    $('#prod_btn').removeClass('selected').next('ul').css('display', 'none'); 
} 

समस्या कहां है?

धन्यवाद

+1

जब मैं hideMenu() फ़ंक्शन में एक चेतावनी() डालता हूं तो मेरे लिए सफारी मोबाइल में समय-समय पर गोलीबारी होती है। क्या यह आपके लिए काम कर रहा है? –

+0

मैंने कोशिश की लेकिन यह कुछ भी नहीं दिखाता है, ऐसा लगता है कि यह फ़ंक्शन को नहीं चलाता है ... – pugia

+1

आप jquery, safari, आदि का किस संस्करण का उपयोग कर रहे हैं? यह सिम्युलेटर पर jquery 1.6.4 और आईओएस 4.3 के साथ मेरे लिए काम करता है। क्या आपको त्रुटियां मिल रही हैं? –

उत्तर

1

मैं एक jsbin करने के लिए अपने उदाहरण ले जाया गया है, और यह मेरे iphone पर काम कर रहा है 4.

कृपया अपने उपकरणों से यहाँ जा रहा यह परीक्षण बाहर: http://jsbin.com/asihac/5

आप कोड यहाँ देख सकते हैं http://jsbin.com/asihac/5/edit

उदाहरण jQuery का उपयोग कर रहा है - नवीनतम और मैंने केवल आवश्यक सीएसएस वर्ग जोड़ा है।

5

मुझे अभी भी एक ही समस्या है। मेरा मैक मेरे मैक पर किसी भी ब्राउज़र में बहुत अच्छा चल रहा है, लेकिन आईओएस डिवाइस पर यह काम नहीं करता है।

मैं अपने टाइमआउट फ़ंक्शन पर ".bind (this)" का उपयोग करता हूं और यही कारण है कि मेरे लिए समस्या पैदा हो रही है। जब मैं अपनी स्क्रिप्ट में ".bind" के साथ फ़ंक्शन ऑब्जेक्ट का विस्तार करता हूं तो यह एक आकर्षण की तरह काम करता है।

searchTimeout = setTimeout(function() { 
... 
}.bind(this),250); 

इस IOS उपकरणों मैं पर काम करने की (जैसा कि ऊपर उल्लेख) के लिए, सिर्फ इस कहा::

Function.prototype.bind = function(parent) { 
    var f = this; 
    var args = []; 

    for (var a = 1; a < arguments.length; a++) { 
     args[args.length] = arguments[a]; 
    } 

    var temp = function() { 
     return f.apply(parent, args); 
    } 

    return(temp); 
} 

मैं किसी भी .bind नहीं दिख रहा है

मेरे कोड कुछ इस तरह है आपके सेटटाइमआउट पर, लेकिन एक ही समस्या वाले अन्य लोगों के लिए यह समस्या हो सकती है। यही कारण है कि मैं पोस्ट कर रहा हूं :-)

+1

पर भी कोशिश की, मुझे आश्चर्य है कि इस समस्या से कैसे जुड़ा हुआ है। – Andy

+1

यह एक प्रमुख मुद्दा है। मैं सिर्फ 20k लाइनों को डीबग करने की कोशिश कर रहा हूं यह पता लगाने की कोशिश कर रहा हूं कि यह आईओएस 6 में क्यों काम कर रहा था और आईओएस 5 नहीं। धन्यवाद !!! – Garrett

+0

अपने पहले उदाहरण का उपयोग करना। यह आईओएस 9.2 पर काम करता है! धन्यवाद! – GisMofx

1

यह आपके कोड पर लागू नहीं होता है, लेकिन आईओएस उपकरणों पर असफल होने वाली लंबी दौड़ वाली स्क्रिप्ट के साथ एक आम समस्या यह है कि 10 सेकंड के बाद मोबाइलसाफारी जावास्क्रिप्ट थ्रेड को मार देता है। आप को इसके आसपास काम करने के लिए setTimeout और/या setInterval का उपयोग करने में सक्षम होना चाहिए, या आप इसे शॉर्टकट बनाकर और इसे ऐप के रूप में चलाने से बच सकते हैं। https://discussions.apple.com/thread/2298038 देखें, विशेष रूप से डेन हैर्रिगन द्वारा टिप्पणियां।

0

ध्यान रखें कि किसी भी सेटटाइमआउट फ़ंक्शन वास्तव में आग की संभावना है जबकि डीओएम तत्व प्रतिपादन कर रहे हैं यदि विलंब मूल्य को बहुत कम पर सेट किया गया हो। हालांकि यह स्पष्ट प्रतीत हो सकता है, इसे किसी भी विधि को फायरिंग के साथ आसानी से भ्रमित किया जा सकता है। परीक्षण करने का एक अच्छा तरीका है एक चेतावनी संकेत चलाने के लिए।

window.onLoad(alert("hey!")); 

फिर यह देखने के लिए जांचें कि आपका कार्य बाद में चला जाता है या नहीं।

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