вложенная функция jQuery срабатывает только один раз

Я загружаю функцию в готовый документ. Все работает один раз. Страницу необходимо обновить, чтобы она снова заработала.

$(document).ready(function () {

    function resetChosen() {

        $('.chosen').val(' ').trigger('chosen:updated');
        alert('how many times will this work?');
    }

    $('#submitter').on('click', function (clickEvent) {

        setTimeout(resetChosen, 500);        

    })
})

Я в основном пытаюсь сбросить поля формы с помощью класса .chosen после ожидания 500 мс. Предупреждение предназначено для отладки.

Работает, но только один раз. Почему?

Спасибо!

ОБНОВЛЕНИЕ: более подробная информация

Я посмотрел HTML, и эта кнопка находится в UpdatePanel ...

<form id ="form1" runat="server">

    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" EnablePageMethods="true" />
    <asp:Timer ID="Timer1" runat="server" Interval="10000" OnTick="Timer1_Click" Enabled="true" />

    <div class="col-10 topRow">
        <div class="dispatchContainer">               
            <div class="col-1">
                <div class="dispatchBtnBox" style="display: block">
                    <asp:UpdatePanel ID="UpdatePanel100" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="True">
                        <Triggers>
                            <asp:AsyncPostBackTrigger ControlID="submitter" EventName="Click" />
                        </Triggers>
                        <ContentTemplate>
                            <asp:Button runat="server" ID="submitter" class="submitter" Text="Notify" OnClick="submitter_Click" />
                        </ContentTemplate>
                    </asp:UpdatePanel>
                </div>
            </div>
        </div>
    </div> 

... предположительно, чтобы страница не обновлялась при каждом нажатии. Возможно, нужно будет добавить эту функцию в диспетчер запросов страниц?

Я обновил теги для своего вопроса.

Спасибо!

ОБНОВЛЕНИЕ 2: Решение:

Я зарегистрировал блок сценария с помощью элемента управления ScriptManager в моем коде за событием щелчка.

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "submitterReset", "submitterReset", false);

Спасибо!


person m0lochwalker    schedule 02.04.2018    source источник
comment
Кажется, у меня работает jsfiddle.net/s6tcrhjw/6   -  person CumminUp07    schedule 02.04.2018
comment
Да, работает! Так в чем проблема. Пожалуйста, опубликуйте некоторые подробности, если это возможно.   -  person Reza Mamun    schedule 02.04.2018
comment
@RezaMamun Спасибо, я не уверен, какие подробности были бы полезны. Обычно, когда я нажимаю на элемент кнопки с ID = submitter, эта функция должна срабатывать каждый раз, но срабатывает только один раз, пока я не обновлю страницу. И сброс val, и предупреждение срабатывают только один раз после загрузки каждой страницы. Я обновлю выше, добавив немного HTML ...   -  person m0lochwalker    schedule 02.04.2018
comment
@RezaMamun Я считаю, что получил это, работая с элементом управления ScriptManager и регистрируя блок сценария запуска. Я обновлю выше ...   -  person m0lochwalker    schedule 02.04.2018


Ответы (3)


При желании можно удалить много разметки UpdatePanel. Некоторые настройки являются настройками по умолчанию, поэтому они вам не нужны. Если вам нравится видеть их на странице, это нормально, просто оставьте их, но вы можете удалить много вещей, даже триггеры - все внутри панели обновлений, вызывающее обратную передачу, автоматически становится триггером.

По умолчанию: UpdateMode = "Conditional"; ChildrenAsTriggers = "Истина".

<asp:UpdatePanel ID="UpdatePanel100" runat="server">
    <ContentTemplate>
        <asp:Button runat="server" ID="submitter" class="submitter"
            Text="Notify" OnClick="submitter_Click" />
    </ContentTemplate>
</asp:UpdatePanel>

[Удаляйте вещи по одному и проверяйте, чтобы быть уверенным.]

person wazz    schedule 03.04.2018

Settimeout запускает код один раз. Setinterval - вот что делает работу. Я переписал для вас код. Попробуйте и посмотрите, поможет ли это.

$(document).ready(function () {
    function resetChosen() {
        $('.chosen').val(' ').trigger('chosen:updated');
        alert('how many times will this work?');
    }

    $('img').on('click', function (clickEvent) {`enter code here`
        setInterval(function () {
            resetChosen()
        }, 500);    
    })
})
person Steve P    schedule 03.04.2018

Я просмотрел разметку для этого и обнаружил, что мой элемент управления находится в asp UpdatePanel. Регистрация скрипта в ScriptManager под моим _Click устранила проблему.

person m0lochwalker    schedule 03.04.2018