Это потому, что значение valueField не определено в вашем объекте конфигурации (пока установлено displayField). Когда extjs пытается загрузить ваше комбо, ему нужны поля значений и отображения, чтобы правильно отобразить ваше комбо, но во время рендеринга ваше значение valueField еще не установлено, и он ожидает ajax-запроса, отправленного на сервер, и ответа отправляется обратно.
В вашем слушателе вы устанавливаете комбо-значение, пока оно еще не визуализируется. Так что, когда вы нажимаете комбо во второй раз, точно после загрузки удаленного JSON, тогда устанавливаются комбо-поля.
{
xtype : 'combobox',
editable : false,
id:'USERTYPECmbo',
queryMode: 'remote',
displayField: 'USERTYPE',
valueField: 'USERTYPE',//set whatever field you like in your json
store :new Ext.data.Store({
autoLoad: true,
fields: [ 'USERTYPE' ],
proxy: {
type: 'ajax',
extraParams: {typeName : 'USERTYPE'},
url : 'USERTYPE.htm',
reader: {
type: 'json',
root : 'res'
}
}
}),
name : 'USERTYPE',
fieldLabel: 'USER TYPE'
}
Обновление:
Одной из проблем, которую я не заметил, было то, что вы создали магазин с использованием Ext.create, и поэтому extjs будет пытаться получить ваш JSON дважды (просто проверьте его с помощью firebug), в то время как одного запроса будет достаточно. Просто используйте новый вместо Ext Создайте. Я протестировал ваш код на моем локальном сервере и он работает правильно. Если у вас все еще остается та же проблема, пожалуйста, предоставьте ссылку на скачивание вашей формы js + html + Store, чтобы я мог просмотреть ваш код. Вы можете скачать мои тестовые файлы, созданные на ваш код и работает с здесь . проверено на FF 6 и Opera 10 и IE9