嵌套的jQuery函数只触发一次

时间:2018-04-02 19:49:22

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

我正在准备文档上加载一个函数。这一切都有效。必须刷新页面才能再次使用。

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

    })
})

我基本上是在等待500ms之后尝试使用类.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:解决方案:

我在Click事件后面的代码上注册了一个带有ScriptManager控件的scriptblock。

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

谢谢!

3 个答案:

答案 0 :(得分:0)

如果需要,可以删除大量UpdatePanel标记。一些设置是默认设置,因此您不需要它们。如果您希望在页面上看到它们没问题,只需保留它们,但您可以删除很多内容,甚至是触发器 - 更新面板中任何导致回发的内容都会自动触发。

默认值:UpdateMode =“有条件”; ChildrenAsTriggers = “真”。

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我查看了这个标记,发现我的控件是在一个asp UpdatePanel中。在我的_Click下使用ScriptManager注册脚本修复了问题。