Страница 1 из 1
Странное поведение CAutoComplete в IE
Добавлено: 2010.10.27, 00:37
Vic
Странное поведение наблюдаю:
- при переходе по ссылке загружается страничка с полем CAutoComplete, при вводе буковок появляется индикатор запроса и все - так и остается висеть, на сервер ничего не посылается ( смотрю по логам сервера, вообще в логах загрузка только странички по адресу из ссылки ).
- при нажатии на кнопку обновления поле начинает нормально работать ( в логах сервера кроме загрузки этой странички появляются еще все скрипты, стили, картинки )
Как можно заставить IE сразу с перехода по ссылке все загружать?
IE 8 версия ( 8.0.6001.18702 )
Re: Странное поведение CAutoComplete в IE
Добавлено: 2010.10.27, 00:40
samdark
Что такое «кнопка обновления»?
Re: Странное поведение CAutoComplete в IE
Добавлено: 2010.10.27, 00:55
Vic
Это такая кнопочка, на которой нарисованы 2 стрелочки по условной окружности, тыкающие друг друга в задницу ( или, проще говоря, то что по эффекту совпадает с нажатием на F5 )
Re: Странное поведение CAutoComplete в IE
Добавлено: 2010.10.27, 01:09
samdark
Похоже, какой-то кеш. Вообще, лучше всего не использовать устаревший CAutoComplete, а сразу попробовать
http://www.yiiframework.com/doc/api/1.1 ... oComplete/.
Re: Странное поведение CAutoComplete в IE
Добавлено: 2010.10.28, 11:16
Vic
Я в нем ничего не ковырял, стоит из коробки.
По поводу CJuiAutoComplete: такая штука получается:
Код: Выделить всё
$this->widget('zii.widgets.jui.CJuiAutoComplete', array(
'name'=>CHtml::activeName($model,'name'),
'sourceUrl'=>array('autocomplete', 'json'=>1),
// additional javascript options for the autocomplete plugin
'options'=>array(
'showAnim'=>'fold',
'select'=>'function(event, ui) { alert("select"); this.value = ui.item.value; }',
'minLength'=>2
),
'htmlOptions'=>array(
'style'=>'height:20px;'
),
));
он опцию 'select' заворачивает в строку, вместо функции.
Код: Выделить всё
jQuery('#Recipe_pat_name').autocomplete(
{
'showAnim':'fold',
'select':'function(event, ui) { alert(\"select\"); this.value = ui.item.value; }',
'minLength':2,
'source':'/index.php?r=patient/autocomplete&json=1'
}
);
Поэтому не срабатывает событие. Правка ручками ( убираение одинатрных кавычек и слешей ) запускает все в норму.
Какой есть способ, кроме как пройтись своими грязными ногами по коду виджета?
Re: Странное поведение CAutoComplete в IE
Добавлено: 2010.10.28, 11:22
BuCeFaL
Код: Выделить всё
'select':'js:function(event, ui) { alert(\"select\"); this.value = ui.item.value; }',
Re: Странное поведение CAutoComplete в IE
Добавлено: 2010.10.28, 11:26
Vic
Продолжу ( ничего, что я сам с собой тут разговариваю? ):
Вот что дает эксплоурер по поводу ошибок ( при переходе по ссылке на страницу ), кстати, и на новом виджете тоже самое, поэтому он тоже работает только после нажатия F5:
Сведения об ошибке на веб-странице
Агент пользователя: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2)
штамп времени: Thu, 28 Oct 2010 08:17:26 UTC
Сообщение: Объект не поддерживает это свойство или метод
Строка: 4954
Символ: 5
Код: 0
URI-код:
http://ru/assets/8641cb4f/jquery.js
вот что интересного в этом файле jquery.js:
Код: Выделить всё
xhr: window.XMLHttpRequest && (window.location.protocol !== "file:" || !window.ActiveXObject) ?
function() {
return new window.XMLHttpRequest(); // вот эта строка 4954
} :
function() {
try {
return new window.ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {}
},
я плохо разбираюсь в том, что должно быть у эксплоурера, но обычно говорят про ActiveXObject()
Re: Странное поведение CAutoComplete в IE
Добавлено: 2010.10.28, 11:29
Vic
BuCeFaL писал(а):Код: Выделить всё
'select':'js:function(event, ui) { alert(\"select\"); this.value = ui.item.value; }',
Вау-вау !!!
Спасибо огромное !!!
( подозреваю, что проход грязными ногами по коду привел к бы к такому же результату, только за большее время, правда, с большим понимаем внутренностей yii )
Еще раз огромное спасибо!!!
Re: Странное поведение CAutoComplete в IE
Добавлено: 2010.10.28, 11:36
BuCeFaL
http://www.yiiframework.com/doc/api/1.1 ... ode-detail
Код: Выделить всё
public static function encode($value)
{
if(is_string($value))
{
if(strpos($value,'js:')===0)
return substr($value,3);
else
return "'".self::quote($value)."'";
}
//...
}
в документации про js: не нашел, но есть отличный комент:
This function doesn't add quotes around value if content is string and begins from "js:" without quotes.
Re: Странное поведение CAutoComplete в IE
Добавлено: 2010.10.28, 11:40
Vic
проверка такого кода:
Код: Выделить всё
<script>
alert(new window.ActiveXObject("Microsoft.XMLHTTP"));
alert(new window.XMLHttpRequest());
</script>
дает предсказуемый результат:
первая строка говорит "object"
вторая - ошибку
получается, jquery где-то промахивается в условии приназначении свойства:
Код: Выделить всё
<script>
alert(window.XMLHttpRequest?"yes":"no");
</script>
говорит "yes" в эксплоурере, есть над чем подумать
странно:
Код: Выделить всё
<script>
alert(window.XMLHttpRequest);
alert(new window.XMLHttpRequest());
</script>
первый алерт говорит, что все хорошо ( см. приложенный рисунок )
а второй говорит ошибку:
Сведения об ошибке на веб-странице
Агент пользователя: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2)
штамп времени: Thu, 28 Oct 2010 08:40:11 UTC
Сообщение: Объект не поддерживает это свойство или метод
Строка: 49
Символ: 1
Код: 0
URI-код:
http://ru/index.php?r=recipe/create
вот как-то так
Re: Странное поведение CAutoComplete в IE
Добавлено: 2010.10.28, 11:45
BuCeFaL
IE реализуют ассинхронный js чезез объект ActiveXObject в то время как остальные через объект XMLHttpRequest.
как результат у IE нету XMLHttp ,а у остальных Activex. в jquery ошибки нету, они выполнели большую часть работы за программиста а именно :
определение какой же объект использовать и обработку событий + состояний.
Re: Странное поведение CAutoComplete в IE
Добавлено: 2010.10.28, 11:47
Vic
BuCeFaL писал(а):
Код: Выделить всё
public static function encode($value)
{
if(is_string($value))
{
if(strpos($value,'js:')===0)
return substr($value,3);
else
return "'".self::quote($value)."'";
}
//...
}
в документации про js: не нашел, но есть отличный комент:
This function doesn't add quotes around value if content is string and begins from "js:" without quotes.
Да, я тоже про это и говорю - проход по коду значительно расширяет кругозор в yii
Re: Странное поведение CAutoComplete в IE
Добавлено: 2010.10.28, 11:56
Vic
BuCeFaL писал(а):
IE реализуют ассинхронный js чезез объект ActiveXObject в то время как остальные через объект XMLHttpRequest.
как результат у IE нету XMLHttp ,а у остальных Activex. в jquery ошибки нету, они выполнели большую часть работы за программиста а именно :
определение какой же объект использовать и обработку событий + состояний.
вот я же привел результаты алертов - том видно, что что-то не так в датком королевстве:
то ли кто-то определяет такой объект, то ли экплоурер подвирает, но первая проверка выходит в true, и поэтому эксплоурер уходит не в ту ветку.
теперь еще один эксперимент:
Код: Выделить всё
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>alert</title>
</head>
<body>
<script>
alert(window.XMLHttpRequest);
alert(new window.XMLHttpRequest());
</script>
</body>
</html>
такой код выплнился без ошибок: два раза сказали про object
Re: Странное поведение CAutoComplete в IE
Добавлено: 2010.10.28, 12:04
Vic
Вот еще:
Код: Выделить всё
function Dump(d,l) {
if (l == null) l = 1;
var s = '';
if (typeof(d) == "object") {
s += " {\n";
for (var k in d) {
for (var i=0; i<l; i++) s += " ";
s += k+": " + Dump(d[k],l+1);
}
for (var i=0; i<l-1; i++) s += " ";
s += "}\n"
} else {
s += "" + d + "\n";
}
return s;
}
document.write(Dump(window.XMLHttpRequest));
дает в IE:
{ }
профит
Re: Странное поведение CAutoComplete в IE
Добавлено: 2010.10.28, 13:25
Vic
пришлось походить грязными ногами по коду и вставил в layout такой пошлый кусок:
Код: Выделить всё
<script type="text/javascript">
/*<![CDATA[*/
jQuery(function($) {
if( $.browser.msie )
jQuery.ajaxSetup({
xhr: function() {
try {
return new window.ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {}
}
})
});
/*]]>*/
</script>
Тебя излупят плетками и ты запрыгаешь, как миленькая
Может, напоследок, кто-нибудь подскажет, куда вписать красиво этот кусок?
Re: Странное поведение CAutoComplete в IE
Добавлено: 2010.10.28, 13:35
Vic
Ну и еще вопрос: как заставить не отсылать форму при выборе значения в autocomplete клавишей "Enter" ?
тут с точностью до наоборот:
в IE, Firefox, Chrome форма не отправляется
в Опере - отправляется