2010-08-22 28 views
28

Cố gắng thay đổi thuộc tính loại input từ password thành text.Loại đầu vào thay đổi jQuery

$('.form').find('input:password').attr({type:"text"}); 

Tại sao tính năng này không hoạt động?

+1

Fyi, bạn có thể sử dụng '.attr ('attrname', 'newvalue')' để đặt một thuộc tính duy nhất. – ThiefMaster

+2

Bản sao của http://stackoverflow.com/questions/1544317/jquery-change-type-of-input-field – thisgeek

+3

@thisgeek Tôi thực sự ấn tượng rằng bạn đã đăng liên kết trùng lặp cho một câu hỏi hơn hai tuổi với một câu hỏi từ ba năm trước. – MiniRagnarok

Trả lời

47

Bạn không thể làm điều này với jQuery, it explicitly forbids it vì IE không hỗ trợ nó (kiểm tra giao diện điều khiển của bạn, bạn sẽ thấy một lỗi.

Bạn cần phải loại bỏ các đầu vào và tạo một hình mới nếu đó là những gì bạn đang sau, ví dụ:

$('.form').find('input:password').each(function() { 
    $("<input type='text' />").attr({ name: this.name, value: this.value }).insertBefore(this); 
}).remove(); 

You can give it a try here

để được rõ ràng về những hạn chế, jQuery sẽ không cho phép thay đổi type trên <button> hoặc <input> nên thứ e hành vi là trình duyệt chéo phù hợp (kể từ khi IE không cho phép nó, họ quyết định nó không được phép ở khắp mọi nơi). Khi cố gắng bạn sẽ nhận được lỗi này trong bảng điều khiển

Error: type property can't be changed

+21

chết tiệt, đáng yêu IE – James

+0

bah, đánh bại tôi với nó :-) –

+1

@Andy - Nó không gây nhầm lẫn với cơ thể của bạn ở đây và đầu của bạn trên meta? :) –

45

giải pháp của tôi:

$('#myinput').clone().attr('type','tel').insertAfter('#myinput').prev().remove(); 
+3

rất thanh lịch và đơn giản :) –

+4

Giải pháp tuyệt vời, mặc dù theo câu trả lời được chấp nhận, có vấn đề nếu bạn có sự kiện gắn với đầu vào ban đầu, cũng bị xóa ... – terraling

+0

Làm thế nào để '.rr()' hoạt động trên phần tử nhân bản nhưng không phải trên chính yếu tố đó? –

10

Tôi biết tôi là một chút muộn để các trò chơi, nhưng tôi chỉ có thể làm điều này trong IE9 (có vẻ như Microsoft đã quyết định cho phép nó?). Tuy nhiên, tôi phải làm điều đó với JavaScript thẳng. Đây chỉ là mẫu của biểu mẫu có danh sách thả xuống thay đổi loại trường tùy thuộc vào những gì được chọn trong trình đơn thả xuống.

function switchSearchFieldType(toPassword) { 
    $('#SearchFieldText').val(''); 
    if (toPassword === true) { 
     $('#SearchFieldText').get(0).setAttribute('type', 'password'); 
    } else { 
     $('#SearchFieldText').get(0).setAttribute('type', 'text'); 
    } 
} 

$('#SelectedDropDownValue').change(function() { 
    if ($("select option:selected").val() === 'password') { 
     switchSearchFieldType(true); 
    } 
    else { 
     switchSearchFieldType(false); 
    } 
}).change(); 
+0

Tôi thích giải pháp này vì không phá hủy các đầu vào ban đầu để lại mọi sự kiện đính kèm còn nguyên vẹn ... – terraling

0

Dưới đây là hai chức năng, chấp nhận một loạt các selector (s) như một tham số đó sẽ thực hiện điều này:

// Turn input into Number keyboard 
    function inputNumber(numArr) { 
    if (numArr instanceof Array) { 
     for (var i = 0; i < numArr.length; i++) { 
     if ($(numArr[i]).length > 0) { 
      var copy = $(numArr[i]); 
      var numEle = copy.clone(); 
      numEle.attr("type", "number"); 
      numEle.insertBefore(copy); 
      copy.remove(); 
     } 
     } 
    } 
    } 
    // Turn input into Email keyboard 
    function inputEmail(emailArr) { 
    if (emailArr instanceof Array) { 
     for (var i = 0; i < emailArr.length; i++) { 
     if ($(emailArr[i]).length > 0) {    
      var copy = $(emailArr[i]); 
      var numEle = copy.clone(); 
      numEle.attr("type", "number"); 
      numEle.insertBefore(copy); 
      copy.remove(); 
     } 
     } 
    } 
    } 

Sau đó, bạn có thể sử dụng như:

var numberArr = ["#some-input-id", "#another-input-id"]; 
    var emailArr = ["#some-input-id", "#another-input-id"]; 

    inputNumber(numberArr); 
    inputEmail(emailArr); 
5

này nên làm việc dễ dàng.

$("selector").attr('type', 'hidden'); 
//Changing it to hidden 
8

SỬ DỤNG prop thay attr

$('.form').find('input:password').prop({type:"text"}); 
0
function passShowHide(){ 
    if($("#YourCheckBoxID").prop('checked')){ 
    document.getElementById("EnterPass").attributes["type"].value = "text"; 
    } 
    else{ 
    document.getElementById("EnterPass").attributes["type"].value="password";} 
+0

Điều này không thực sự trả lời câu hỏi. Câu hỏi là làm thế nào để thay đổi ** loại **, và mã này thay đổi ** giá trị **, và nó thậm chí còn làm điều đó kém. Điều này * có thể * là một câu trả lời phù hợp cho một câu hỏi hoàn toàn khác, nhưng không phải cho câu hỏi này. –

0

này là khá dễ ngươi. Điều này hoạt động khá tốt.

$('#btn_showHide').on('click', function() { 
    if($(this).text() == 'Show') 
    { 
     $(this).text('Hide'); 
     $('#code').attr('type', 'text'); 
    } 
    else 
    { 
     $(this).text('Show'); 
     $('#code').attr('type', 'password'); 
    } 
    }); 
Các vấn đề liên quan