2015-09-18 4 views
20

<input> विशेषता autocapitalize="words" डिफ़ॉल्ट आईओएस कीबोर्ड के साथ आईओएस 8,9 के तहत मोबाइल सफारी में तोड़ दिया गया है। यह फ़ील्ड के पहले 2 अक्षर को ऊपरी करता है, न कि प्रत्येक शब्द का पहला अक्षर।आईओएस 8,9 में मोबाइल सफारी पर टूटा हुआ शब्द "autocapitalize =" क्या कोई कामकाज है?

आधिकारिक प्रलेखन कहते हैं समर्थित है: https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/Attributes.html

, परीक्षण आईओएस एमुलेटर या वास्तविक डिवाइस पर निम्नलिखित क्षेत्र खोलने के लिए:

First name: <input type="text" autocorrect="off" autocapitalize="words" value="First Name"> 

आप http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_form_submit उपयोग कर सकते हैं परीक्षण करने के लिए, या iOS 8 या पर इस स्निपेट 9:

<!DOCTYPE html> 
 
<html lang="en"> 
 
    <head> 
 
    <meta charset="utf-8"> 
 
    <title>Test autocapitalize</title> 
 
    </head> 
 
    <body> 
 
    <form> 
 
     <label for="words">autocapitalize="words"</label> 
 
     <input type="text" autocapitalize="words" name="text1" id="words" /><br /> 
 
     <label for="sentences">autocapitalize="sentences"</label> 
 
     <input type="text" autocapitalize="sentences" name="text2" id="sentences" /><br /> 
 
     <label for="none">autocapitalize="none"</label> 
 
     <input type="text" autocapitalize="none" name="text3" id="none" /> 
 
    </form> 
 
    </body> 
 
</html>

मुझे आश्चर्य है कि यह 8.x के बाद से मौजूद है और रडार के नीचे पारित हो गया है।

क्या कोई ज्ञात कामकाज है?

अद्यतन 10/13: iPhone 6s + सफारी पूरी तरह से किसी भी HTML विशेषता इनपुट क्षेत्र पर सेट पर ध्यान नहीं देता।

+0

आप एप्पल को यह सूचना दी है? – Ken

+0

इसके अलावा, मुझे w3 में समस्या दिखाई नहीं दे रही है ... यूआरएल आप संदर्भ - क्या यह जावास्क्रिप्ट के साथ एक समस्या हो सकती है जिसका आप उपयोग कर रहे हैं? – Ken

+1

हाँ मैं सवाल यहां पोस्ट: https://forums.developer.apple.com/message/57845#57845 सुनिश्चित नहीं हैं कि अगर सबसे अच्छी जगह है या वहाँ कहीं और हो सकता है। मैंने प्रदान किए गए डब्ल्यू 3 लिंक पर स्पष्टीकरण देने के लिए आपको 'पहला नाम: <इनपुट प्रकार = "टेक्स्ट" autocorrect = "off" autocapitalize = "words" value = "first name"> 'के साथ HTML मार्कअप को प्रतिस्थापित करने की आवश्यकता है। फिर आप समस्या को देखने में सक्षम होना चाहिए – juanca

उत्तर

1

यदि आप के लिए तैयार हैं इस समस्या के लिए एक समाधान होने के लिए वहाँ लगता है (अस्थायी) इस पुस्तकालय में शामिल हैं: https://github.com/agrublev/autocapitalize। हालांकि इसे jQuery की आवश्यकता होती है, इसलिए मोबाइल डिवाइस पर आदर्श नहीं हो सकता है। मैंने कोड का यह छोटा टुकड़ा बनाया है जो jQuery के उपयोग के बिना शब्दों के लिए के लिए एक ही चीज़ करता है। यह अन्य मामलों को शामिल करने के लिए विस्तारित किया जा सकता है।

उदाहरण नीचे भी शब्दों फ़ायदा उठाने पेज तैयार पर शुरू में बजाय सिर्फ 'KeyUp' घटना पर की। मैंने कई उपकरणों पर कोड का परीक्षण किया है और मुझे कोई त्रुटि नहीं मिली है। लेकिन अगर कुछ काम नहीं करता है या आपको लगता है कि कुछ बेहतर किया जा सकता है तो टिप्पणी करने में संकोच न करें।

ध्यान दें कि 'domReady' समारोह मैं IE9 और ऊपर के लिए काम करता है जोड़ा। यदि आपको पुराने संस्करण के लिए समर्थन की आवश्यकता है तो कृपया this देखें।

// Create one global variable 
var lib = {}; 

(function (lib) { 

    lib.autocapitalize_element = function (element) { 
    var val = element.value.toLowerCase(); 
    var split_identifier = " "; 
    var split = val.split(split_identifier); 
    for (var i = 0; i < split.length; i ++) { 
     var v = split[i]; 
     if (v.length) { 
      split[i] = v.charAt(0).toUpperCase() + v.substring(1); 
     } 
    }; 
    val = split.join(split_identifier); 
    element.value = val; 
    } 

    lib.autocapitalize_helper = function(element) { 
    element.onkeyup = function(e) { 
     var inp = String.fromCharCode(e.keyCode); 
     if (/[a-zA-Z0-9-_ ]/.test(inp)) { 
     lib.autocapitalize_element(element); 
     } 
    }; 
    } 

    lib.autocapitalize = function() { 
    var elements = document.querySelectorAll("input[autocapitalize], textarea[autocapitalize]"); 
    for(var i = 0; i < elements.length; i++) { 
     lib.autocapitalize_helper(elements[i]); 
     lib.autocapitalize_element(elements[i]); 
    } 
    } 

    lib.domReady = function(callback) { 
    document.readyState === "interactive" || document.readyState === "complete" ? callback() : document.addEventListener("DOMContentLoaded", callback); 
    }; 
}(lib)); 


// This function gets called when the dom is ready. I've added it to the lib variable now because I dislike adding global variables, but you can put it anywhere you like. 
lib.domReady(function() { 
    lib.autocapitalize(); 
}); 
+0

निश्चित रूप से। क्या आप jQuery के बिना पसंद करते हैं? तब मैं देखूंगा कि मैं आज रात क्या कर सकता हूं;) –

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