2012-02-17 26 views
7

Sử dụng jQuery 1.7.1, tôi đang cố tạo trình xử lý sự kiện cho sự kiện thay đổi trên menu thả xuống. Trình đơn thả xuống được thêm động vào DOM. Dường như làm việc độc đáo trên hầu hết các trình duyệt, nhưng oh rằng IE8 kooky muốn trở nên khó khăn. Có cách giải quyết nào không? Có nên tác phẩm này không? Tôi đang làm rất nhiều đọc ở đây và ở nơi khác và đầu vào có vẻ là mâu thuẫn trong nhiều trường hợp và các giải pháp đề xuất mà tôi đã tìm thấy/cố gắng đã không làm việc cho tôi.jQuery on() thay đổi trong IE8

Bất kỳ ai có thể làm rõ liệu điều này có nên hoạt động trong IE8 cho các menu thả xuống .state-seletor được tạo khi đang di chuyển không?

$(document).on('change', '.state-selector', function(e) { 
    e.preventDefault(); 
    alert('ON()'); 
}); 

Tôi sẽ tiếp tục hỏi xung quanh, nhưng nếu có ai có thể làm rõ điều này trước khi tôi mất trí, tôi sẽ đánh giá cao điều đó.

Cảm ơn.

CẬP NHẬT

Tại @ yêu cầu Wertisdk của bên dưới, đây là đoạn tôi thả xuống:

<select name="data[Contractor][service_area_state]" class="state-selector"> 
    <option value="">Select a state...</option> 
    <option value="AK">Alaska</option> 
    <option value="AL">Alabama</option> 
    ... 
    <option value="WI">Wisconsin</option> 
    <option value="WV">West Virginia</option> 
    <option value="WY">Wyoming</option> 
</select> 

UPDATE 2

Đến thời điểm @ mblase75 của, có lẽ phương pháp được sử dụng để tạo ra năng động các vấn đề thả xuống. Về cơ bản, tôi nhân bản một nút DOM hiện có và làm rỗng giá trị đã được chọn ở đó. Cần lưu ý rằng .additionalink a cũng được tạo động. Khi bạn nhấp vào một .addtionallink a, mẫu được nhân bản bao gồm một .addtionallink a nút mới:

$(document).on('click', '.additionallink a', function(e) { 
    e.preventDefault(); 

    var copy = $(this).closest('.template').clone(); 

    // Massage the template copy's content and insert it 
    // - Clear the value selected in the original dropdown 
    // - Clear the list of counties loaded based on the original dropdown selection 
    $('.state-selector', copy).val($('.state-selector option:first', copy).val()); 
    $('.counties', copy).empty(); 
    $(this).closest('.template').after(copy); 
}); 

CẬP NHẬT 3

Dưới đây là một tương tự JSFiddle. Đó là gần như mã của tôi, nhưng có một khác biệt chính có thể là tất cả sự khác biệt. Fiddle này sử dụng .append() để chèn nội dung mới dựa trên lựa chọn trạng thái. Mã của tôi sử dụng phương thức .load(). Nếu không, tất cả đều giống nhau.

+0

Bạn có thể gửi một đoạn html, jQuery sẽ tương tác với? Nó có thể cụ thể cho phần tử html bạn đang nhắm mục tiêu. – Wertisdk

+0

Tôi mong chờ câu trả lời này. Tôi có cùng một vấn đề. –

+0

@Wertisdk, tôi đã cập nhật câu hỏi của mình ở trên. Tôi không chắc nó hữu ích như thế nào, nhưng hãy hỏi và bạn sẽ nhận được (đôi khi). :-) –

Trả lời

1

Tôi nghĩ rằng câu thần chú ở đây là .clone(), bạn có thể chạy vào lỗi này mà đã được cố định trong 1.7.2 beta: http://bugs.jquery.com/ticket/11076

+0

Vé không chỉ ra rằng nó cụ thể cho IE8 mà chắc chắn là những gì tôi nhìn thấy. Tôi đã bỏ lỡ một cái gì đó? –

+0

Hãy thử mã của bạn bằng http://code.jquery.com/jquery-git.js và xem nó có hoạt động không. –

+0

Yessuh, nó chắc chắn không xuất hiện. Kỳ lạ là lỗi IE8 cụ thể (ít nhất là đối với tôi). Tôi sẽ kiểm tra nhiều hơn một chút, nhưng những dấu hiệu ban đầu thì tốt. –