.blur() не срабатывает при нажатии вне средства выбора даты

У меня есть событие .blur() для четырех текстовых входов, к которым привязаны средства выбора даты и времени. Когда я «перехожу» к следующему элементу управления, он работает нормально, но когда я нажимаю где-то снаружи, событие не запускается. Я что-то не так делаю или проблема с событием .blur()?

Код JavasSript для события:

    $(".calcTimespan").blur(function () {
        $.ajax({
            type: "GET",
            url: '@Url.Action("CalculateTimespan")',
            data: {
                "franDatum": $("#Dyk_FranDatum").val(),
                "franTid": $("#Dyk_FranTid").val(),
                "tillDatum": $("#Dyk_TillDatum").val(),
                "tillTid": $("#Dyk_TillTid").val()
            },
            dataType: 'html',
            cache: false,
            success: function (data) {
                if (data != "FAIL")
                    $("#Dyk_DyktidMinuter").val(data);
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert("Ett fel inträffade vid hämtning av dykning!");
            }
        });
    });

HTML:

    <div>
        <label for="Fr_n_datum">Fr&#229;n datum</label>
        <label style="margin-left: 40px;">Tid</label>
        <br />
        <input class="halv datumpicker calcTimespan" id="Dyk_FranDatum" name="Dyk.FranDatum" type="text" value="" />
        <input class="halv tidpicker calcTimespan" id="Dyk_FranTid" name="Dyk.FranTid" type="text" value="" />
    </div>
    <br />

    <div>
        <label for="Till_datum">Till datum</label>
        <label style="margin-left: 50px;">Tid</label>
        <br />
        <input class="halv datumpicker calcTimespan" id="Dyk_TillDatum" name="Dyk.TillDatum" type="text" value="" />
        <input class="halv tidpicker calcTimespan" id="Dyk_TillTid" name="Dyk.TillTid" type="text" value="" />
    </div>
    <br />

    <div>
        <label for="Dyktim__min_">Dyktim (min)</label>
        <label style="margin-left: 33px;">Pris per minut</label>
        <br />
        <input class="halv" id="Dyk_DyktidMinuter" name="Dyk_DyktidMinuter" type="text" value="" />
        <input class="halv" id="Dyk_Pris" name="Dyk.Pris" type="text" value="" />
    </div>

Я ориентируюсь только на IE9.

EDIT Кажется, что события работают нормально. Проблема в том, что когда я щелкаю в средстве выбора даты, чтобы выбрать дату, уже при наведении курсора мыши на дату, событие запускается, даже если значение еще не установлено компонентом в тексте ввода!

Теперь я должен найти способ либо получить дату «нажатия мыши», либо отложить событие до того момента, когда оно действительно установлено в тексте ввода.


person kaze    schedule 28.08.2012    source источник
comment
это не HTML.. вы должны вставить сгенерированный вывод вашего внутреннего кода   -  person Zoltan Toth    schedule 28.08.2012
comment
Элемент теряет фокус, когда вы щелкаете снаружи? Событие blur() вызывается только тогда, когда элемент теряет фокус.   -  person Bart Friederichs    schedule 28.08.2012
comment
Вы правы, сейчас он обновлен.   -  person kaze    schedule 28.08.2012
comment
@BartFriederichs, да, курсор мигает в другом поле ввода.   -  person kaze    schedule 28.08.2012
comment
как вы можете быть уверены, что .blur() не срабатывает при нажатии снаружи. вот пример jsfiddle.net/m9jEq, я заменил $.ajax на console.log("in"), и отображается сообщение каждый раз, когда input.calcTimespan теряет фокус (проверено в IE9). Поэтому я думаю, что в вашем ajax-вызове есть проблема.   -  person M. Abbas    schedule 28.08.2012
comment
@m.abbas Ты что-то задумал! Я добавил console.log в javascript и аналогичный код в контроллере (инкрементный счетчик с каждой стороны). Однако они прекрасно работают с обеих сторон. Проблема может быть, когда я пытаюсь установить возвращаемое значение для входного текста.   -  person kaze    schedule 28.08.2012
comment
Не могли бы вы добавить console.log(data) к функции success (непосредственно перед if) и убедиться, что у вас нет ошибок JS в консоли браузера.   -  person M. Abbas    schedule 28.08.2012
comment
Пожалуйста, проверьте мое новое редактирование. Это средство выбора даты вызывает слишком раннее срабатывание события, прежде чем значение будет действительно установлено во входном тексте.   -  person kaze    schedule 28.08.2012


Ответы (2)


На самом деле проблема, с которой я столкнулся, заключалась в следующем: размытие ввода перед передачей даты, избежать/обходной путь?

Я использовал вариант ответа Purells для решения своей проблемы.

Спасибо за всю поддержку. Именно помощь в этом вопросе и привела меня к настоящей проблеме.

person kaze    schedule 29.08.2012
comment
Хорошая работа, не выбирая его ответ в качестве реального ответа и в процессе теряя ответ для дальнейшего использования. Так как уже не могу найти. - person Blackunknown; 12.08.2014

Кажется, есть проблемы с IE9, и событие размытия не срабатывает последовательно, попробуйте вместо этого связать элементы с помощью focusout. .

person Endy    schedule 28.08.2012
comment
Спасибо за ваш ответ, это не помогло, точно такое же поведение. - person kaze; 28.08.2012