4

何かが選択されると、スクリプトがボタンをクリックし、選択可能な値をポストバックします。しかし、私の ASP.NET Ajax と UpdatePanels ではうまくいきません。部分的なポストバックではなく、完全なポストバックが発生することがあります。

私のデバッグからの私の結論は、停止機能の実行中に jQuery が舞台裏で何かを行っているということです。停止機能を停止するアラートを追加すると、部分的なポストバックが正常に機能します。

さらに混乱を招くことに、これはIE9およびでは機能しますが、またはでは機能しChromeません。したがって、ブラウザ固有の可能性もあります。IE7IE8

jQuery のバージョン: v1.6.2

脚本:

<script language="javascript">
    $('.selectable').live("mouseover", function () {
        if (!$(this).data("selectable-init")) {
            $(this).data("selectable-init", true);

            $(this).selectable({
                filter: '.item',
                stop: function () {
                    $("#<% =btnPostback.ClientID %>").click();                        
                }
            });
        }
    });    
</script>

HTML:

<div class="selectable">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
    <div class="item">4</div>
</div>

<asp:UpdatePanel runat="server">
    <ContentTemplate>
        <asp:Literal ID="litIsPostback" runat="server"></asp:Literal>
        <asp:Button ID="btnPostback" runat="server" OnClick="btnPostback_OnClick" />
    </ContentTemplate>
</asp:UpdatePanel>

コードビハインド:

protected void btnPostback_OnClick(object sender, EventArgs e)
{
    litIsPostback.Text = ScriptManager.GetCurrent(this).IsInAsyncPostBack.ToString();
}
4

1 に答える 1

0

これは、私が思いついた解決策に最も近いものです。

        $('.selectable').selectable({
            filter: '.item',
            stop: function (event, ui) {
                $('.ui-selectable-helper').remove();

                setTimeout(function () {
                    $("#<% =btnPostback.ClientID %>").click();
                }, 1);
            }
        });

ポストバックの前にヘルパー (なげなわ) を削除することで、上から下にドラッグできますが、その逆はできません。jQuery では、停止イベントの後にヘルパーが削除されます。

setTimeout が機能する理由はわかりませんが、完全なポストバックの問題も修正されます。

于 2012-10-02T08:43:57.003 に答える