Проверка работоспособности: изменить событие, которое не запускается впервые с клавиатуры - PullRequest
2 голосов
/ 21 мая 2010

Я провел большое количество исследований по этому вопросу и нашел кучу сообщений о проблемах и решениях, но, по общему мнению, все проблемы с изменениями в IE6 были исправлены в jQuery 1.4.2.

У меня проблема, когда событие изменения не запускается в jQuery 1.4.2, но оно успешно сработало в jQuery 1.3.2. Это в IE6.

Я собираюсь представить ошибку для этого, но для здравого смысла я хотел бы сначала опубликовать ее здесь, чтобы увидеть, что я что-то упустил. Я не понимаю, почему это так работает ...

<HTML>
<HEAD>
<TITLE>jQuery 1.4.2 Problem </TITLE>

<script src="jquery-1.4.2.min.js" type="text/javascript"></script>
<script>
    $(document).ready( function() {
        $("#firstBox").change(function() {
            alert("CHANGE");
        });

        // ONLOAD of document autofocus into the first element...
        $("form").find(":input:visible:first").focus()
    });
</script>
</HEAD>

<BODY>
<form>

<select id="firstBox">
<option value="" selected="selected">--</option>
<option value="1">One</option>
<option value="2">Two</option>
</select>

<br><br>

<input size="10" id="secondBox">

</form>
</BODY>
</HTML>

Достаточно просто, верно? Загрузите страницу, выделите первый элемент. Замена первого элемента, оповещение.

Если вы используете мышь, она работает как положено. Страница загружается, фокус находится в выпадающем списке, вы меняете опцию, вы получаете предупреждение.

Проблема в том, что вы используете клавиатуру. Страница загружается, фокус находится в выпадающем списке, вы нажимаете стрелку вниз. Опция меняется. Tab с поля, без предупреждения. Weird. Чтобы сделать его еще более странным, если вы вернетесь в поле и измените его снова (все с помощью клавиатуры), событие изменения СЛЕДУЕТ запускать после выхода из табло на этот раз.

Есть идеи?

Ответы [ 4 ]

6 голосов
/ 27 мая 2010

Я решил применить это исправление, и оно работает:

$(function() {
    $("select").keyup(function () {
        $(this).triggerHandler("change")
    });
});

Причина в том, что наше приложение уже некоторое время использует IE6, и пользователи сразу же выбирают блоки изменений (поля скрыты / отображаются). Это завершает это.

Спасибо за предложения

1 голос
/ 15 июля 2010

У меня была проблема, когда следующий код не работает, пока я не изменю значение ввода во второй раз.

$("#General_Value").change(function () {
    $(this).removeClass("parsedValue");
});

Я не уверен, почему, но я думаю, что какой-то другой код (сценарии проверки клиента .Net MVC2) вмешивается и останавливает цепочку событий.

Я решил протестировать обычный старый javascript и он работает !

var value = document.getElementById("General_Value");
value.onchange = function () {
    $(this).removeClass("parsedValue");
};

Мне не нравится смешивать код jQuery и чистый javascript, но это единственный способ заставить его работать.

Надеюсь, это поможет кому-то еще!

0 голосов
/ 07 августа 2012

В моей форме были сотни полей, и onchange не запускался с первого раза. Я сделал следующую тренировку на основе ответа MACCA1:

$(".txt").keyup(function () {
    if (!document.getElementById($(this).attr('id')).onchange) {
        document.getElementById($(this).attr('id')).onchange = ch;
    }
});


function ch() {
    if (!isDirty) {
        isDirty = true;
        isButCli = false;
    }
}
0 голосов
/ 22 июня 2011

Пожалуйста, обратитесь к следующим сообщениям

http://bugs.jquery.com/ticket/8083
http://msdn.microsoft.com/en-us/library/aa158563(v=office.10).aspx

...