Александр П.
16 сообщений
#14 лет назад
Помогите разобраться. Есть сайт, добавляю JS. Там есть форма, происходит ее обработка на JS. В мозиле все хорошо. При тесте в опере возникают ситуации:

1) Хочу фокус включить на input с ошибочной информацией. Было так:
document.getElementById("fff").focus()


для Opera пришлось делать
setTimeout('document.getElementById("fff").focus()', 250);



2) С помощью Jquery Forms отправляю ajax запрос. Ответ приходит в XML

Опции для формы
success: OrderProcessXml,

и функция

function OrderProcessXml(resXML) {
var err = $('error', resXML).text();

В Опере err = ""
Но если поставить первой строкой alert
function OrderProcessXml(resXML) {
alert(1);
var err = $('error', resXML).text();

то err принимает нужное значение (цифру)

Что делать в этой ситуации? Alert здесь не к месту будет.
Антон В.
1807 сообщений
#14 лет назад
Код срабатывает раньше, чем подгружается инпут...

Ставьте по событию LOAD... Как-то так.
Александр П.
16 сообщений
#14 лет назад
Код
document.getElementById("fff".focus()
стоит в конце документа
Евгений О.
2989 сообщений
#14 лет назад
<script defer="defer">...</script>
defer - откладывает выполнение скрипта до тех пор, пока вся страница не будет загружена полностью.
Александр П.
16 сообщений
#14 лет назад
DEFER - реализация только в IE, если смотреть htmlbook.
Владимир Ф.
1322 сообщения
#14 лет назад
Если jquery, как говорите, используете
то
$(document).ready(function() {
и т.д.
Александр П.
16 сообщений
#14 лет назад
Цитата ("vovan_f"):
Если jquery, как говорите, используете
то
$(document).ready(function() {
и т.д.


Вероятно, это ответ на 1 вопрос.
Но что делать со 2 вопросом?
Антон В.
1807 сообщений
#14 лет назад
vovan_f, не-а, если скрипт срабатывает быстрее, чем появляется инпут, то тут как раз то, о чем я говорил - событие LOAD.

$(window).load(function() {


Правда, может некорректно работать в ИЕ.
Александр П.
16 сообщений
#14 лет назад
Странно, ни load(), ни ready() не решают 1 вопрос.


// $(window).load(function() {
// $(document).ready(function(){
document.getElementById("fff").focus();
// });
Максим Ф.
3195 сообщений
#14 лет назад
Ссылку на код покажите, что вы там делаете.
Александр П.
16 сообщений
#14 лет назад
AlekartRu, локально на денвере.
Максим Ф.
3195 сообщений
#14 лет назад
Скажем так, задачи, решаемые вами стандартны, почему не работает - не ясно, и без просмотра кода - это к гадалке.
Александр П.
16 сообщений
#14 лет назад

<script type="text/javascript">
options_form = {
dataType: 'xml',
success: OrderProcessXml,
beforeSubmit: OrderBeforeSubmit,
url: '/ajax.php?js'
};

function OrderShowError(msg, elem) {
setTimeout('document.getElementById("' + elem + '").focus()', 250);
$('#order_place_error').text(msg);
$('#order_place_error').fadeIn('slow');
setTimeout("OrderHideError()", 7000);
}

function OrderHideError() {
$('#order_place_error').fadeOut('slow');
}

function OrderBeforeSubmit(arr, $form, options) {
OrderHideError();
return true;
}

function OrderProcessXml(resXML) {
var err = $('error', resXML).text();

if (err == 1) {
var msg = $('msg', resXML).text();
var elem = $('field', resXML).text();
OrderShowError(msg, elem);
}
}
</script>



Сейчас проблема в строке 26. Там нужно ставить alert в Opera.