2012-06-14 21 views
8

Vấn đề của tôi là rất đơn giảnjQuery removeAttr ('loại') không hoạt động

$('#button').removeAttr('type'); 

gây ra một lỗi trên firebug

type property can't be changed 

Tôi có 2 câu hỏi:

  • thế nào để giải quyết vấn đề này?
  • Có tham chiếu nào với danh sách các thuộc tính không thể thay đổi được không?

Cảm ơn

EDIT

Những gì tôi muốn làm là:

Ngăn chặn các nút từ nộp mẫu đơn.

Lưu ý: nút của tôi được bao gồm dưới dạng mẫu html, tôi không thể truy cập vào mẫu biểu mẫu.
Cái gì như:

include 'form.php'; 
include 'buttons.php'; 

nơi tôi có thể kiểm soát chỉ trên buttons.php

+2

bạn không có câu trả lời 'loại thuộc tính không thể thay đổi ' – mgraph

+0

một nửa câu trả lời, vẫn là danh sách :) – skafandri

+0

Vì bạn không thể thay đổi loại phần tử, bạn sẽ phải thay thế nó bằng phần tử mới. –

Trả lời

17

Bạn không thể thay đổi một input 's type trong IE (< 9?) Sau khi nó đã được chèn vào DOM. jQuery gây ra lỗi cho tất cả các trình duyệt vì điều này.

Từ nguồn:

set: function(elem, value) { 
      // We can't allow the type property to be changed (since it causes problems in IE) 
      if (rtype.test(elem.nodeName) && elem.parentNode) { 
       jQuery.error("type property can't be changed"); 

Không có trường hợp khác tôi biết về (hoặc jQuery biết về) và làm thế nào để làm được việc này phụ thuộc rất nhiều vào những gì bạn đang cố gắng làm ở nơi đầu tiên . Xem xét việc tạo một phần tử mới với kiểu khác và sử dụng ví dụ đó.

Edit: Để ngăn chặn các nút từ nộp một mẫu, bạn có thể sử dụng:

$("#button").click(function(e){ 
    e.preventDefault(); 
}); 

Hoặc (tín dụng Tim Down):

$("#button").prop("disabled", true); 

Để ngăn chặn hình thức từ được gửi qua bất kỳ phương tiện nào, bạn có thể sử dụng:

$("#form").submit(function(e){ 
    e.preventDefault(); 
}); 
+3

Đặt nút bị tắt có vẻ là một lựa chọn tốt hơn. Nó đơn giản hơn và cung cấp phản hồi cho người dùng. '$ (" # nút ") [0] .disabled = true;' –

+0

@TimDown thực sự và làm cho các nút không có sẵn thông qua tabbing vv :) ​​nhờ ý tưởng – Esailija

+0

Vô hiệu hóa nút là không thể, bởi vì chức năng khác sẽ bị ràng buộc đến nó – skafandri

6

bạn có thể thay thế nó:

$('#button').replaceWith('<input type="text" value="text"/>'); 

hoặc sử dụng event.preventDefault()

+0

lớn đề nghị - và một lựa chọn tốt đẹp chỉ đơn giản là chuyển' type' - và (mặc dù điều này có thể hoặc không thể là một lợi ích) - điều này cũng sẽ loại bỏ bất kỳ xử lý nút khác. –

1

Vì bạn chỉ muốn vô hiệu hóa các nút gửi:

Nếu bạn đang sử dụng jQuery < 1.6 làm điều này:

$("#button").attr("disabled", 'disabled'); 

Nếu bạn đang sử dụng jQuery 1.6 +:

$("#button").prop("disabled", true); 

Xem câu hỏi này: .prop() vs .attr() tài liệu tham khảo lý do tại sao.

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