2009-07-17 37 views
7

Mobile safari hỗ trợ thuộc tính trên các yếu tố đầu vào được gọi là autocapitalize [documented here], khi được đặt thành 'tắt' sẽ dừng iPhone tận dụng đầu vào văn bản vào trường đó, rất hữu ích cho trường url hoặc email.Có thể tự động cấp nguồn được tắt bằng javascript trong safari di động không?

<input type="text" class="email" autocapitalize="off" /> 

Nhưng thuộc tính này là không hợp lệ trong html 5 (hoặc một spec như xa như tôi biết) để bao gồm nó trong html sẽ tạo ra một trang html không hợp lệ, những gì tôi muốn làm là có thể thêm thuộc tính này cho các trường tải trọng cụ thể bằng javascript với một cái gì đó như thế này:

$(document).ready(function(){ 
    jQuery('input.email, input.url').attr('autocapitalize', 'off'); 
}); 

thêm thuộc tính chính xác vào firefox và máy tính để bàn, nhưng dường như không làm gì trong safari di động, bất kỳ ý tưởng nào?

+4

Tốt hơn nên chỉ định nó trong HTML và phải chịu cảnh báo vô hại hơn là làm điều đó trong Javascript mà không có lợi ích thực sự. Bạn đã thay thế một cái gì đó đơn giản, rõ ràng và nhanh chóng, mà làm việc ngay cả khi không có kịch bản, với một cái gì đó không cần thiết phức tạp. –

+2

@Glenn: không chính xác là cảnh báo vô hại. Bạn (và bất kỳ ai khác duy trì mã) đã phải nhớ rằng cảnh báo xác thực cụ thể này không quan trọng. Loại khó chịu. –

+3

@Paul: Mục đích của người xác thực là để đảm bảo bạn biết khi bạn sử dụng các tính năng không chuẩn, vì vậy bạn có thể đưa ra quyết định có học vấn hơn là sử dụng chúng một cách vô tình. Họ không ở đó để ngăn cản bạn sử dụng chúng. –

Trả lời

8

Điều này sẽ được khắc phục trong iPhone OS 3.0. Bạn đang thử phiên bản này của hệ điều hành iPhone nào?

Email: <input id="email" type="text"><br> 
URL: <input id="url" type="text"><br> 
<script> 
//document.getElementById("email").autocapitalize = 'off'; 
//document.getElementById("url").autocapitalize = 'on'; 
document.getElementById("email").setAttribute('autocapitalize', 'off'); 
document.getElementById("url").setAttribute('autocapitalize', 'on'); 
alert(document.body.innerHTML); 
</script> 
+0

Yeah trong iPhone 3.0, mã này hoạt động tốt, nhưng jQuery tương đương thì không, cảm ơn rất nhiều –

+0

Đừng làm điều này. Nó hoàn toàn vô nghĩa và chỉ làm xáo trộn trang. –

+0

Nhưng làm thế nào để vô hiệu hóa tự động sửa chữa và nhanh chóng "."? – Dmitry

1

Nếu đó là tính năng hữu ích, bạn sẽ chỉ phải chọn giữa xác thực nghiêm ngặt và trải nghiệm người dùng. Cá nhân, tôi sẽ chọn UX bất kỳ ngày nào.

0

Vì vậy, tôi không thể có được jQuery để làm điều đó nhưng đồng bằng javascript cũ, như ddkilzer công trình đề nghị, vì vậy tôi đặt cùng chức năng này để áp dụng các autocapitalize = 'tắt' tùy chọn cho tất cả các đầu vào với một lớp cụ thể:

$(document).ready(function(){ 
    // disable autocapitalize on .url, .email fields 
    unautocapitalize('url'); 
    unautocapitalize('email'); 
}); 

function unautocapitalize(cssClass){ 
    var elems = document.getElementsByClassName(cssClass); 
    for (var j = 0; j < elems.length; j++){ 
    elems[j].setAttribute('autocapitalize', 'off'); 
    } 
} 
8

Lưu ý phụ. Bạn có thể cải thiện trải nghiệm người dùng trên iOS nhiều hơn bằng cách chỉ định loại đầu vào là "email" để tự động hiển thị bàn phím "email" (các ký tự hơi tốt hơn để nhập email).

<input type="email" class="email" autocapitalize="off" /> 

Here is some documentation về cách loại đầu vào có thể điều khiển iOS bàn phím.

3

Nó chỉ là không hợp lệ nếu bạn thêm nó qua tập lệnh hoặc nếu bạn thêm nó vào đánh dấu. Chỉ là trình xác thực không thể nhận ra nó nếu bạn thêm nó thông qua tập lệnh.

Chỉ cần đặt nó vào đánh dấu và đặt nhận xét bên cạnh nó, như <!-- the "autocapitalize" attribute is an Apple proprietary extension for the iPhone to change its IME behaviour -->, theo cách đó mọi người xem mã trong trình xác thực sẽ biết điều gì đang xảy ra.

Các vấn đề liên quan