2010-10-14 33 views
6

Tôi đang phân tích cú pháp phản hồi JSON qua $.ajax() và tạo biểu mẫu từ giá trị của đối tượng này. Các kịch bản tôi đã viết là dài, nhưng đây là những gì nó làm:jQuery .attr ('type', 'submit') trên phần tử nút cho tôi một lỗi lạ trong IE7

  1. động tạo:
    ~ một yếu tố hình thức,
    ~ một yếu tố fieldset,
    ~ một yếu tố nút,
    ~ 20 hoặc lâu hơn đầu vào văn bản và các yếu tố nhãn

  2. Phụ thêm các đầu vào và nhãn vào fieldset

  3. Phụ thêm nút vào fieldset

  4. Gắn thêm fieldset vào biểu mẫu

  5. Thêm biểu mẫu vào phần tử trong DOM hiện tại.

Mọi thứ đều hoạt động trên tất cả các trình duyệt ngoại trừ một đoạn mã nhỏ trong IE. Tôi đã thu hẹp nó xuống đoạn mã sau đây. (doc là một biến chứa document)

fieldset.append(
    $(doc.createElement('button')) 
     .addClass('ui-button') 
     .attr('type', 'submit') 
     .html('Re-Rate') 
     .button() 
); 

Đây là bước 3 từ trên cao. Nó tạo ra một phần tử nút, thêm một lớp, đặt thuộc tính type thành submit, cung cấp cho nó một số văn bản và sau đó gắn nó vào fieldset. IE không thành công với các lỗi "Object không hỗ trợ hành động này"

Nếu tôi nhận xét ra dòng .attr() như thế này:

fieldset.append(
    $(doc.createElement('button')) 
     .addClass('ui-button') 
     //.attr('type', 'submit') 
     .html('Re-Rate') 
     .button() 
); 

Tất cả mọi thứ hoạt động như mong đợi.

Nếu bạn đang tự hỏi, phương pháp .button() là jQuery UI

+0

gì xảy ra nếu bạn 'doc.createElement()' nó lần đầu tiên, gán cho nó gõ JS đơn giản, và sau đó biến nó thành một đối tượng jQuery? Chỉ để tìm ra bước nào là vấn đề? –

+1

Bạn có thể muốn suy nghĩ về việc sử dụng một jQuery template [engine] (http://github.com/nje/jquery-tmpl) - [example] (http://weblogs.asp.net/scottgu/archive/2010/ 05/07/jquery-templates-and-data-linking-và-microsoft-góp-to-jquery.aspx) –

+0

Ý tưởng hay John. Pekka, theo câu trả lời của Nick, nó có vẻ là jQuery-By-Design. – Stephen

Trả lời

10

jQuery doesn't allow you to change the type of an <input> or <button> element.

Lý do cho điều này là nhất quán và IE không cho phép bạn thay đổi type sau khi được chèn vào DOM.

+1

Thú vị! Không biết điều đó. Làm thế nào để tự động tạo một ''? – Stephen

+0

Về mặt kỹ thuật, tôi chưa chèn nó vào DOM ... – Stephen

+4

@Stephen - Đúng, nhưng jQuery không cho phép nó trong mọi trường hợp, mặc dù IE sẽ ổn trong ví dụ của bạn. Để tạo phần tử, chỉ cần tạo phần tử với phần tử html: '$ ('

0

jQuery sẽ không cho phép bạn sửa đổi thuộc tính type trên phần tử nút hiện có vì IE ném lỗi khi bạn cố gắng làm như vậy.

Tuy nhiên, bạn có thể thử một cái gì đó như thế này (sử dụng jQuery 1.4 của súc tích hơn cú pháp tạo phần tử):

fieldset.append(
    $('<button>', {'type': 'submit', 'class': 'ui-button', 'html': 'Re-Rate'}).button() 
); 
+1

Bạn không thể tạo phần tử như thế này, cú pháp không hợp lệ và nếu nó là nó sẽ ném một lỗi. Bạn không thể có các thuộc tính trong chuỗi HTML * và * đối tượng thuộc tính (hãy thử nó :)). –

+0

Rất tiếc, tôi đã cập nhật câu trả lời của mình để nó hoạt động. – gabriel

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