2012-08-08 35 views
8

Tôi đang cố thay đổi loại đầu vào, cụ thể sau khi nhấp vào đầu vào tôi cần thay đổi type="text" thành type="date".Thay đổi loại yếu tố Đầu vào bằng cách sử dụng jquery

<input type="text" placeholder="DOB" id="dob" name="dob" /> 
<script> 
    $("#dob").click(function() { 
     $(this).attr('type', 'date'); 

    }); 
</script> 

Tôi muốn thực hiện việc này cho ứng dụng iPhone. Điều này không làm việc trong iphone 4. Làm thế nào có thể làm điều này?

+2

Tôi có thể hỏi lý do bạn muốn làm điều này không? Tôi khá chắc chắn phải có một cách tốt hơn. – Undefined

+0

Trong iphone 4 trình giữ chỗ không hiển thị cho kiểu dữ liệu đầu vào. Vì vậy, tôi muốn thay đổi loại sau khi nhấp vào trường – sree

+0

Tốt hơn có hai trường nhập và ẩn trường văn bản và hiển thị trường ngày trên sự kiện nhấp. – Ankur

Trả lời

21

Sử dụng mã này:

<input type="text" placeholder="DOB" id="dob" name="dob" /> 
<script> 
    $("#dob").click(function(){ 
     $(this).prop('type', 'date'); 

    }); 
</script> 

Đây là fiddle: http://jsfiddle.net/HNKkW/

6

Đó là một tài sản, vì vậy prop() sẽ làm điều đó:

$("#dob").on('click', function(){ 
    $(this).prop('type', 'date'); 
});​ 

Và hãy nhớ để bọc rằng trong một hàm document.ready!

FIDDLE

0

Nếu bạn sử dụng phiên bản trước của Jquery

$('body').delegate('#dob','click',function(){ 
      $(this).attr('type', 'date'); 

     }); 

Hoặc nếu bạn sử dụng mới nhất thấy @adeno 's câu trả lời

0

Xem làm việc jsfiddle này.

Bạn không thể thay đổi loại đầu vào do các hạn chế trong trình duyệt sử dụng .attr. Lưu ý cảnh báo này bạn nhận được từ giao diện điều khiển:

Uncaught Error: type property can't be changed 

Bạn có thể thay đổi kiểu bằng cách sử dụng .prop()

$("#dob").on('click', function(){ 
    $(this).prop('type', 'date'); 
});​ 

Tôi nghĩ rằng có thể là một chút của một vấn đề tiềm ẩn ở đây. Người dùng có bị nhầm lẫn với kiểu hộp văn bản thay đổi không?

Nếu có thể bạn nên thử và thay đổi loại hộp văn bản trước khi hiển thị cho người dùng.

0

Tôi nghĩ rằng giải pháp đúng cho vấn đề của bạn đang sử dụng .focus.prop tài sản.

<script> 
    $("#dob").focus(function() { 
     $(this).prop('type', 'date'); 

    }); 
</script> 
0

cho tôi sử dụng prop trực tiếp trên phần tử không hoạt động, điều này tuy nhiên làm việc cho tôi sau rất nhiều không quan trọng, vì vậy tôi muốn chia sẻ và có thể tiết kiệm được một ai đó đau đầu.

$(document).on('change', '#showPass', function() { 
    if ($(this).is(':checked')) { 
     $(this).parents('form').find('#passField').prop("type", "text"); 
    } else { 
     $(this).parents('form').find('#passField').prop("type", "password"); 
    } 
}); 
Các vấn đề liên quan