嵌套 jQuery 函数只触发一次

nested jQuery function only fires once

我正在加载文档准备就绪的功能。这一切都有效一次。该页面必须刷新才能再次工作。

$(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);        

    })
})

我基本上是在等待 500 毫秒后尝试使用 class.chosen 重置表单字段。警报用于调试。

有效,但只有一次。为什么?

谢谢!

更新:更多细节

我查看了 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);

谢谢!

如果需要,您可以删除很多 UpdatePanel 标记。一些设置是默认设置,因此您不需要它们。如果您想在页面上看到它们,那很好,就留下它们,但您可以删除很多东西,甚至是触发器 - 更新面板内导致回发的任何内容都会自动成为触发器。

默认值:更新模式="Conditional"; ChildrenAsTriggers="True".

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

[一次删除一个东西并进行测试,以确保万无一失。]

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);    
    })
})

我查看了它的标记,发现我的控件位于 asp UpdatePanel 中。在我的 _Click 下使用 ScriptManager 注册脚本解决了这个问题。