Tôi đang cố xử lý các hành vi khác nhau của ngModel
trong các trình duyệt khác nhau.ngModel - Cách xử lý hành vi khác nhau của nó trong các trình duyệt khác nhau?
Chỉ thị của tôi kết thúc tốt đẹp jqueryUI tự động hoàn thành và trên sự kiện select
của nó gọi là ngModel.$setViewValue(selectedItem.id)
. Tự động hoàn tất cho phép người dùng chọn mục bằng cách nhấp chuột hoặc bằng cách nhấn enter
trên bàn phím.
Nếu mục được đề xuất là:
{
"name": "Apple",
"id": "1000"
}
Tôi hy vọng sau khi chọn nó, giá trị ngModel sẽ được lựa chọn item của id
-1000
.
Trong Chrome nó hoạt động OK - nó đặt
$viewValue
và$modelValue
một cách chính xác ($modelValue=1000
).Trong Firefox nó đặt mô hình như trong Chrome (
$modelValue=1000
), nhưng khi tôi bấm một nơi khác - làm mờ (sau đó trình duyệt có thể bắnchange
sự kiện), thay đổi mô hình và nó trở nên giống như giá trị đầu vào có thể nhìn thấy ($modelValue='Apple'
).Trong IE 11, nó chỉ đặt đúng mô hình khi tôi chọn mục có nhấp chuột. Nếu tôi chọn nó bằng cách nhấn
enter
, mô hình trở nên giá trị đầu vào có thể nhìn thấy ($modelValue='Apple'
)
Đây là plunkr: http://plnkr.co/edit/o2Jkgprf8EakGqnpu22Y?p=preview
Tôi muốn để đạt được hành vi tương tự ở mọi trình duyệt. Làm thế nào để đối phó với những vấn đề đó?
Tôi nghĩ bạn nên sử dụng hai mô hình riêng biệt, một mô hình giữ giá trị không đồng bộ được giải quyết (có thể là riêng tư) và một người dùng sử dụng để nhập truy vấn (công khai). Khi nó đứng, khi một loại trong một tên không có thật hoàn chỉnh (một trong đó không phải là trong danh sách các loại trái cây), thì đây sẽ là giá trị mô hình. Mà có lẽ là không thực sự hữu ích khi bạn mong đợi nó là một ID. – Yoshi
@Yoshi, Đó là những gì bạn đã đề cập nó chỉ là một cải tiến xác nhận - người dùng sẽ không thể gõ một cái gì đó khác hơn là id, nhưng nó không giải quyết được vấn đề. (Hoặc tôi không biết làm thế nào để thực hiện nó đúng cách). Với gợi ý của bạn, nó sẽ là một cái gì đó như thế: http://plnkr.co/edit/7nCAEhIXX2wGNR18eRqk. '$ modelValue = null' cho tên không có thật, nhưng trong hàm phân tích cú pháp firefox vẫn chạy lại trên blur, vì vậy tôi mất giá trị đã chọn. – akn
Nếu đó là sự kiện một mình, bạn có thể thử sử dụng ['ngModelOptions.updateOn'] (https://docs.angularjs.org/api/ng/directive/ngModelOptions). – Yoshi