3

重複の可能性:
ページ上のリンク ボタンをデフォルト ボタンとして設定すると、IE では正常に動作しますが、Mozila では動作しません。

asp.netのasp:panelのデフォルトボタンとしてlinkbuttonを設定するには? ボタンをデフォルトとして設定できることは知っていますが、私のアプリケーションはすべてのフォームにリンクボタンを使用しています。それがどのように行われるかについての提案。

編集:

今、私はこれを試してみましたが、Firefox でも動作しますが、私の JavaScript 検証 (つまり) リンクボタンの onclient クリックが機能しないのはなぜですか?

var __defaultFired = false;

        function WebForm_FireDefaultButton(event, target) {
            var element = event.target || event.srcElement;

            if (!__defaultFired && event.keyCode == 13 && !(element && (element.tagName.toLowerCase() == "textarea"))) {
                var defaultButton;

                if (__nonMSDOMBrowser)
                    defaultButton = document.getElementById(target);
                else
                    defaultButton = document.all[target];

                if (defaultButton) {
                    if (typeof (defaultButton.click) != "undefined")
                        defaultButton.click();
                    else
                        eval(unescape(defaultButton.href.replace("javascript:", "")));

                    event.cancelBubble = true;

                    if (event.stopPropagation) event.stopPropagation();
                    return false;
                }
            }
            return true;
        }

2番目の編集:

カスタム リンクボタン コントロールを機能させることはできましたが、OnClientClick をそれにフックすることはできませんでした。ソースusing-panel-defaultbutton-property-with-linkbutton-control-in-asp-net

そして私はこれをしました、

<%@ Register Namespace="App_Code" TagPrefix="ac" %>
<asp:Label runat="server" ID="lblHello" />
<asp:Panel runat="server" DefaultButton="lbHello">
    First name: <asp:TextBox runat="server" ID="txtFirstName" />
    <ac:LinkButtonDefault ID="lbHello" runat="server" Text="Click me" 
        OnClientClick="javascript:alert('hai');" OnClick="lbHello_Click" />
</asp:Panel>

クライアント側の機能が機能しないのはなぜですか? なにか提案を。

4

4 に答える 4

9

カスタム コントロールを使用するのではなく、属性を追加してテキスト ボックスのonKeyPressイベントを処理するという単純な方法を取ることができます。これにより、テキストボックスからの押下と's イベントのEnterトリガーが正しく処理されます。LinkButtonこのアプローチの欠点はLinkButton OnClientClick、Firefox でイベントがトリガーされないことです。これは、リンク先のブログ投稿で説明されている問題に関連しています。ユーザーが実際にリンクをマウスでクリックしたときにのみトリガーされます。ただし、IE では、テキスト ボックスと直接クリックの両方からトリガーされます。

解決策 #1 -属性を追加するコードは次のとおりです。

protected void Page_Load(object sender, EventArgs e)
{
    txtFirstName.Attributes.Add("onKeyPress",
        "javascript:if (event.keyCode == 13) __doPostBack('" + lbHello.ClientID + "','')");
}

それを試して、ニーズに合っているかどうかを確認してください。先ほど説明した制限を念頭に置いてください。

上記の制限をなくしたい場合は、そのブログ投稿のコメントの 1 つに、正しく機能しているように見えるアプローチが示されています。を取り除くように変更しStringBuilder、C# に変換しました。

解決策 2 -関数を追加して登録するコードは次のとおりです。

protected void Page_PreRender(object sender, EventArgs e)
{
    string addClickFunctionScript = @"function addClickFunction(id) {
           var b = document.getElementById(id);
           if (b && typeof(b.click) == 'undefined')
             b.click = function() {
               var result = true;
               if (b.onclick) result = b.onclick();
               if (typeof(result) == 'undefined' || result)
                 eval(b.getAttribute('href'));
             }
         };";

    string clickScript = String.Format("addClickFunction('{0}');", lbHello.ClientID);

    Page.ClientScript.RegisterStartupScript(this.GetType(), "addClickFunctionScript", addClickFunctionScript, true);
    Page.ClientScript.RegisterStartupScript(this.GetType(), "click_" + lbHello.ClientID, clickScript, true);
}

ページ マークアップ - ページ マークアップは、前述のソリューションの両方で同じです。

<asp:Label runat="server" ID="lblHello" />
<asp:Panel ID="Panel1" runat="server" DefaultButton="lbHello">
    First name:
    <asp:TextBox runat="server" ID="txtFirstName" />
    <asp:LinkButton ID="lbHello" runat="server" Text="Click me" OnClick="lbHello_Click"                 
         OnClientClick="javascript:alert('Hello, World!');"/>
</asp:Panel>

どちらの場合も、このタイプの機能を実現するためにカスタム コントロールは必要ありません。複雑にしないでおく。

于 2010-09-02T17:21:52.797 に答える
2

これを見てください

<asp:Panel runat="server" DefaultButton="lbHello">
    First name: <asp:TextBox runat="server" ID="txtFirstName" />
    <asp:LinkButton ID="lbHello" runat="server" Text="Click me" OnClick="lbHello_Click" />
</asp:Panel>

残りの答えはここにあります。FireFox http://kpumuk.info/asp-net/using-panel-defaultbutton-property-with-linkbutton-control-in-asp-net/で発生する問題を修正する方法を示します。

于 2010-08-27T04:45:22.200 に答える
1

もう 1 つの方法は、このように onclick イベントを偽造することです。

jQuery(document).ready(function () {
    jQuery('#<%= txtFirstName.ClientID %>').keypress(function (event) {
        if (event.keyCode == 13) {
            eval($('#<%=lbHello.ClientID %>').attr('href'));
        }
    });
});

欠点は、デフォルトのボタンを作成する必要があるすべての場所でこれを使用する必要があることです。

于 2010-11-18T12:24:37.260 に答える
0

これを見る

ページ上のボタンをリンクし、それをデフォルト ボタンとして設定します。IE では正常に動作しますが、Mozila では動作しません

ダミー ボタンの回答は、IMO で最もクリーンなソリューションです。

于 2011-12-29T20:54:20.047 に答える