我正試圖在不同的瀏覽器中處理ngModel
的不同行爲。ngModel - 如何處理不同瀏覽器中的不同行爲?
我的指令包裝了jqueryUI的自動完成功能,在其select
事件中它調用ngModel.$setViewValue(selectedItem.id)
。自動完成允許用戶通過鼠標點擊或按鍵盤上的enter
來選擇項目。
如果建議產品:
{
"name": "Apple",
"id": "1000"
}
選擇它後,我想到,ngModel值將所選項目的id
- 1000
。
在Chrome中它工作正常 - 它集
$viewValue
和$modelValue
正確($modelValue=1000
)。在Firefox它設置模型在Chrome(
$modelValue=1000
),但是當我點擊別的地方 - 使模糊(當時的瀏覽器可能觸發change
事件),模型的變化和它變得一樣可見的輸入值($modelValue='Apple'
)。在IE 11中,只有當我用鼠標單擊選擇項目時,它纔會設置模型正確。如果我按
enter
選擇它,模型變得可見的輸入值($modelValue='Apple'
)
這裏是plunkr:http://plnkr.co/edit/o2Jkgprf8EakGqnpu22Y?p=preview
我想達到在每個瀏覽器相同的行爲。如何處理這個問題?
我認爲使用兩種截然不同的模型會更好,一種是保存解析的異步值(可能是私有的),另一種是用戶用來輸入查詢(public)的模型。就目前而言,當你輸入一個完整的虛假名稱(不在水果列表中)時,這將成爲模型值。當你期望它是一個ID時,這可能不會有什麼幫助。 – Yoshi
@Yoshi,你剛纔提到它只是一個驗證改進 - 用戶將不能輸入id以外的內容,但它不能解決問題。 (或者我不知道如何正確實施)。隨着你的提示它會是這樣的:http://plnkr.co/edit/7nCAEhIXX2wGNR18eRqk。 '$ modelValue = null'爲僞造的名字,但是在firefox解析器函數仍然在blur上再次運行,所以我失去了我的選擇值。 – akn
如果是單獨的事件,您可以嘗試使用['ngModelOptions.updateOn'](https://docs.angularjs.org/api/ng/directive/ngModelOptions)。 – Yoshi