11

मुझे प्लेसहोल्डर समर्थन के लिए परीक्षण करने की आवश्यकता है। निम्नलिखित काम करता है सभी आधुनिक ब्राउज़रों में महान है, साथ ही IE7, IE8, IE9:एचटीएमएल 5 प्लेसहोल्डर सुविधा का पता लगाने की समस्या

$.support.placeholder = (function() { 
    var i = document.createElement("input"); 
    return "placeholder" in i; 
}()); 

यह काम करता है, लेकिन JSLint in के उपयोग के बारे में शिकायत:

'में' अप्रत्याशित। अपरिभाषित के साथ तुलना करें, या इसके बजाय hasOwnProperty विधि का उपयोग करें।

ठीक है, तो मैं इसे इस के लिए refactor होगी:

$.support.placeholder = (function() { 
    var i = document.createElement("input"); 
    return i.hasOwnProperty("placeholder"); 
}()); 

अब यह किसी भी त्रुटि या चेतावनी के बिना JSLint गुजरता है, लेकिन यह इस पुराने शाहबलूत के साथ IE7 और IE8 में टूट जाता है:

वस्तु संपत्ति या विधि 'hasOwnProperty'

किसी भी विचार कैसे JSLint खुश करने के लिए, का समर्थन नहीं करता हम के रूप में आईई 7 और आईई 8 के रूप में होगा?

+2

jslint happy जैसे टूल बनाना जरूरी नहीं है जब तक आप जानते हों कि आप क्या कर रहे हैं। यदि आपके मालिक इसे चाहते हैं, तो उन्हें बेवकूफ साबित करने के कुछ अच्छे उदाहरण दें। – ThiefMaster

+0

मुझे नहीं पता कि jslint 'in' के खिलाफ क्यों अनुशंसा करता है। यह थोड़ी देर के लिए आसपास रहा है इसलिए पूर्ण समर्थन होना चाहिए और यह बहुत सहज है। प्लेसहोल्डर समर्थन के लिए, यह ठोस है: https://github.com/mathiasbynens/jquery-placeholder – ryanve

उत्तर

15

तुम भी अन्य समाधान JSLint का सुझाव इस्तेमाल कर सकते हैं।

+0

यह भी अच्छी तरह से काम करता है, और यह काफी संक्षेप में है, और अगर मुझे त्रुटि संदेश में पढ़ने पर परेशान था तो मुझे यह पता लगाना चाहिए था :) – karim79

+2

वास्तव में जेएसलिंट चाहता है कि आप 'वापसी i.placeholder! == अपरिभाषित' का उपयोग करें; और यह ' यदि आप कोशिश करते हैं और 'टाइपफ i.placeholder! ==' अपरिभाषित 'का उपयोग करते हैं, तो आप ऐसा कहेंगे; '। – MHollis

3

आप इस समारोह को Object.prototype के माध्यम से प्राप्त कर सकते हैं, फिर call इसे तत्व पर प्राप्त कर सकते हैं। यह उपलब्ध और आप एक i.hasOwnProperty -fashion तरीके से कॉल करने के लिए सक्षम किया जा रहा जा रहा है समारोह के लिए बनाता है (यानी पर्दे के पीछे this मूल्य जब यह i बुला रहा है):

Object.prototype.hasOwnProperty.call(i, "placeholder"); 
+0

यह अच्छी तरह से काम करता है। उत्तर के लिए धन्यवाद :) – karim79

+0

हम्म, आप किसके साथ जाते हैं। – karim79

+0

@ karim79: यह एक संपत्ति को 'अपरिभाषित' पर सेट करने की अनुमति देता है, लेकिन दूसरी तरफ फ़ंक्शन कॉल ओवरहेड पेश करता है। – pimvdb

5

मेरा जवाब डॉन होगा ' टी। जेएसलिंट को खुश न करें। जेएसलिंट यह है कि कैसे क्रॉकफोर्ड दृश्य जावास्क्रिप्ट किया जाना चाहिए। यह उसका निजी मानक है। यदि आप जावास्क्रिप्ट के लिए किसी प्रकार का लिंट चाहते हैं, तो JSHint का उपयोग करें। यह जेएसलिंट का एक फोर्क संस्करण है जो पूरी तरह से विन्यास योग्य और पागल आवश्यकताओं के बिना है। इसके मुखपृष्ठ से:

जेएसहिंट जेएसलिंट का एक कांटा है, जो डगलस क्रॉकफोर्ड द्वारा लिखित और रखरखाव उपकरण है।

परियोजना मूलतः कि अपनी पर एक विशेष कोडिंग शैली लागू नहीं करता है उन-लेकिन फिर अपने आप ही के साथ एक अलग स्थिर विश्लेषण उपकरण के रूप में तब्दील JSLint-एक का एक और अधिक विन्यास संस्करण बनाने के प्रयास के रूप में शुरू लक्ष्यों और आदर्शों।

return typeof i.placeholder !== 'undefined'; 

यह समस्याओं के बिना पार ब्राउज़र काम करना चाहिए:

+0

सहमत हैं, लेकिन दुर्भाग्य से मेरा निर्णय नहीं। मुझे कम से कम समय के लिए इसके साथ रहना चाहिए। वैसे भी +1। – karim79

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