1

我有一个绑定到更新面板的搜索按钮作为触发器,如下所示:

<asp:Panel ID="CRM_Search" runat="server">
    <p>Search:&nbsp;<asp:TextBox ID="CRM_Search_Box" CssClass="CRM_Search_Box" runat="server"></asp:TextBox>
    <asp:Button ID="CRM_Search_Button" CssClass="CRM_Search_Button" runat="server" Text="Search" OnClick="SearchLeads" /></p>
</asp:Panel>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="CRM_Search_Button" />
    </Triggers>
    <ContentTemplate> 
     /* Content Here */
    </ContentTemplate>
</asp:UpdatePanel>

在我的 javascript 中,我使用 jQuery 来抓取搜索框并将其绑定以使搜索按钮单击:

    $($(".CRM_Search_Box")[0]).keyup(
        function () {
            $($(".CRM_Search_Button")[0]).click();
        }
    );

这非常有效,除非我开始打字太快。一旦我输入太快(我的猜测是它是否比数据实际返回的速度更快),整个页面就会刷新(进行回发?),而不仅仅是更新面板。

我还发现,如果我只是快速单击按钮,它就会开始做同样的事情,而不是打字。

有没有办法阻止它这样做?可能在第一个请求完成之前阻止第二个请求?如果我不在正确的轨道上,那么有人还有其他想法吗?

谢谢,
马特

4

1 回答 1

3

最好做这样的事情,让他喘口气:)

我放置了一个计时器,因此您在发送点击之前等待 250 毫秒。我总是这样做,我从不正确地调用搜索,因为当有人输入一个单词时,实际上程序没有理由一直搜索......

这也将避免您遇到的问题。

var hTimeOut = null;
$($(".CRM_Search_Box")[0]).keyup(
        function () {
            if(hTimeOut)
                clearTimeout(hTimeOut);
            hTimeOut = setTimeout(function() { $($(".CRM_Search_Button")[0]).click(); }, 250);            
        }
);
于 2010-04-13T06:25:56.423 回答