2012-05-18 27 views
7

Tiếp tục áp dụng mã của tôi để làm việc với IE ...jquery thiết lập giá trị đầu vào ẩn không làm việc như mong đợi trong IE7 và IE8

Tôi có một ẩn div chứa một hình thức để chỉnh sửa một số thông tin. Khi người dùng chọn mục cần chỉnh sửa, div này được hiển thị và các trường được điền thông tin cho mục đó. Số div đó (theo thuật ngữ đơn giản) trông giống như sau:

<div id="editform"> 
<form action="" method="post" id="qform" name="qform"> 
    First param: <input name="field1" id="field1"/> <br/> 
    Second param: <input name="field2" id="field2"/> <br/> 
    ... 

    <input type="hidden" name="qid" id="qid" value=""/> 

    <img id="submit" src="..." alt="..." title="..." /> 
</form> 

Tôi sử dụng jquery để đặt giá trị vào các trường. Chức năng của tôi để mở div chỉnh sửa trông giống như sau:

function edit_item(item_id) { 
    item = get_item(item_id); //this will return a JS object 
    $('#field1').val(item.property1); 
    $('#field2').val(item.property2); 
    ... 
    $('#qid').val(item_id); 
    $('#submit').click(function() { 
     alert($('#qid').val()); 
     $('#qform').ajaxSubmit(); 
    }); 
} 

Tất cả điều này hoạt động tốt trong IE7 và IE8, tôi gặp sự cố lạ. Tôi có thể thấy item_id được đặt chính xác trong chức năng edit_item, tuy nhiên ngay sau khi chức năng đó hoàn tất, giá trị nhập ẩn (qid) được đặt lại thành chuỗi rỗng. Khi biểu mẫu được gửi ajax, cảnh báo cho biết giá trị là một chuỗi trống mặc dù nó được đặt chính xác. Thật thú vị, tất cả các lĩnh vực khác là tốt. Và nó hoạt động chính xác trong IE 9.

Tôi thiếu gì ở đây? Rất cám ơn trước.

+1

ID phải là duy nhất trong đặc tả HTML. Bạn có bội số của "# field1". Ngoài ra, ID không thể bắt đầu bằng dấu băm. Xem: http://stackoverflow.com/questions/448981/what-characters-are-valid-in-css-class-names –

+0

Cảm ơn nhận xét, tuy nhiên đây không phải là vấn đề. Trong mã thực sự của tôi cả hai đều hợp lệ: ID duy nhất và không có dấu băm - lỗi chính tả khi tạo mã đơn giản cho câu hỏi. –

+0

có thể chức năng edit_item đã được kích hoạt một lần nữa với thông số item_id sai? bạn đã cố thêm cảnh báo (item_id) chưa; dòng đến hàm edit_item? – Serhiy

Trả lời

22

này là hoàn toàn ngu ngốc, và nó không phải là trường hợp, tuy nhiên:

$('#field1').val(item.property1); 

đã không làm việc. Tuy nhiên,

$('#field1').attr("value", item.property1); 

hoạt động tốt. Tôi để nó ở đó.

+8

Một số trình duyệt thời gian tự hào trong việc thiết kế/phát triển cuộc sống khủng khiếp .. !! ! – Misam

+0

@Misam cho tôi biết về nó :) –

+0

Không có công trình nào trên đây cho tôi trong IE 8,9,10: ( – NullPointer

1

Giải pháp cho IE mà không JQuery trong tinh khiết JavaScript trông không quá phức tạp:

document.getElementById(id).setAttribute('value', value); 
+0

Ồ, tại sao tác phẩm này hoạt động chứ không phải cú pháp el.value = value thông thường? –

1

Ngoài câu trả lời Aleks G, tôi phát hiện ra rằng value thuộc tính phải không được định nghĩa ngầm trong các yếu tố tiềm ẩn trong để jQuery .setAttr().val() làm việc mà không có vấn đề trong IE8.

Xem ở đây để biết thêm chi tiết: jQuery .val() setter not working?

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