【问题标题】:nested jQuery function only fires once嵌套的 jQuery 函数只触发一次
【发布时间】:2023-03-10 19:19:01
【问题描述】:

我正在加载一个文档准备好的函数。这一切都工作一次。必须刷新页面才能再次工作。

$(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 毫秒后尝试使用 .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);

谢谢!

【问题讨论】:

  • 它似乎对我有用jsfiddle.net/s6tcrhjw/6
  • 是的,它正在工作!那么问题是什么。如果可能,请发布一些详细信息。
  • @RezaMamun 谢谢,我不确定还有哪些细节会有所帮助。基本上,当我点击 ID="submitter" 的按钮元素时,这个函数应该每次都会触发,但它只会触发一次,直到我刷新页面。 val reset 和 alert 都只在每次页面加载后触发一次。我将在上面更新一些 HTML...
  • @RezaMamun 我相信我可以使用 ScriptManager 控件并注册启动脚本块。我会在上面更新...

标签: jquery asp.net scope updatepanel nested-function


【解决方案1】:

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

默认值:UpdateMode="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>

[一次删除一个东西并测试,只是为了确定。]

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多