2013-01-17 15 views
8

मैंने उपयोगी 'मोबाइल' ईवेंट (available here) की लाइब्रेरी लिखी है। यह अनिवार्य रूप से स्पर्श घटनाओं को एकजुट करता है ताकि एक भी घटना को तत्व के लिए बाध्य किया जा सके, और यह उपयोगकर्ता के डिवाइस (यानी मोबाइल या डेस्कटॉप) पर ध्यान दिए बिना ट्रिगर होगा।

कोड अच्छी तरह से काम कर रहा है, लेकिन उपयोगकर्ता की समस्या को डीबग करते समय, मैंने देखा कि लाइब्रेरी अब काम नहीं करती है जब jQuery 1.9.0 का उपयोग किया जाता है (jQuery के सभी पिछले संस्करणों में समस्या नहीं होती है)।

समस्याग्रस्त कोड इस प्रकार है:

// Add Event shortcuts: 
$.each(('tapstart tapend tap singletap doubletap taphold swipe swipeup swiperight swipedown swipeleft scrollstart scrollend orientationchange').split(' '), function(i, name)  { 
    $.fn[name] = function(fn) 
    { 
     return fn ? this.bind(name, fn) : this.trigger(name); 
    }; 
    $.attrFn[name] = true; 
}); 

निम्न पंक्ति पर त्रुटि Uncaught TypeError: Cannot set property 'tapstart' of undefined:

$.attrFn[name] = true;

किसी को भी इस के लिए एक ठीक उत्पादन की दिशा में मुझे बात कर सकते हैं?

मैं एक साथ डाल दिया है 2 jsFiddle क़ौम समस्या को दिखाने के लिए:

(jQuery 1.8.3 का प्रयोग करके) अगर मैं परिभाषित $.attrFn, यह swipe* घटनाओं के लिए कोड को हल करता है, लेकिन फिर tap और doubletap जैसे अन्य लोगों के साथ समस्याएं पैदा करता है। Uncaught TypeError: Cannot call method 'call' of undefined, समस्याग्रस्त लाइन किया जा रहा है के साथ:

$.event.handle.call(obj, event); 

एक बार फिर, वहाँ संदर्भ के लिए दो jsFiddles हैं:

  • Working version (jQuery 1.8.3 का प्रयोग करके)
  • उदाहरण के लिए, बाध्यकारी tap अब त्रुटि पैदा करता है
  • Non-working version ($.attrFn = $.attrFn || {}; ठीक साथ jQuery 1.9.0 का उपयोग कर)
+0

आप 1.8 स्रोत कोड की जांच करते हैं, यह बहुत स्पष्ट :-) – Pointy

उत्तर

10

कि वस्तु (.attrFn) 1.8 में बस एक स्टब था; यह 1.9 में चला गया है।

अपने कोड 1.8 में काम किया है, तो आप

$.attrFn = $.attrFn || {}; 

जोड़ने के लिए कहीं न कहीं इसे ठीक करने में सक्षम होना चाहिए।

+0

है ... या यदि संपत्ति वहाँ नहीं है निश्चित रूप से सिर्फ अद्यतन नहीं करते हैं। – Pointy

+0

हाँ - ठीक काम करता है ... http://jsfiddle.net/9J3Qw/5/ – Archer

+0

यह 'स्वाइप *' घटनाओं के लिए ठीक काम करता है, लेकिन यदि हम एक टैप में जोड़ने का प्रयास करते हैं, तो अब एक अलग त्रुटि होती है। कृपया मेरा अद्यतन प्रश्न देखें। यहां मदद के लिए +1, आपको दिमाग। – BenM

8

From the jQuery 1.9 Release Notes

Other undocumented properties and methods

The following internal properties and methods were never documented and have been removed in 1.9. Any code that depends on them should be rewritten.

  • jQuery.deletedIds
  • jQuery.uuid
  • jQuery.attrFn
  • jQuery.clean()
  • jQuery.event.handle()
  • jQuery.offset.bodyOffset()
+0

दुर्भाग्यवश, jquerymobile इसे अभी भी उपयोग करने लगता है। यह सुनिश्चित नहीं है कि इसे स्थानीय रूप से पैच करने के अलावा इसे कैसे ठीक किया जाए। यह इसे dev/test के लिए काम कर सकता है, लेकिन रिलीज के लिए कोई अच्छा नहीं है। –

+0

@GerryGleason क्या आप jQuery मोबाइल के नवीनतम संस्करण पर हैं? उन्हें jQuery के नवीनतम और महानतम संस्करण का समर्थन करना चाहिए। यदि नहीं, तो उनके साथ एक बग फ़ाइल करें। – epascarello

+1

jQuery मोबाइल 1.4+ वास्तव में attrFn का उपयोग नहीं करता है, यह जांचता है कि यह jQuery के संस्करण को निर्धारित करने के लिए मौजूद है या नहीं। यदि आप jQuery माइग्रेट का उपयोग कर रहे हैं, तो यह एक झूठी चेतावनी उत्पन्न करेगा। Https://github.com/jquery/jquery-mobile/issues/5984 देखें। – Osan

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