4

ログインコマンドとグループ検証をアクティブにするために、2番目のボタンを使用して最初のボタンのクリック/コマンドをアクティブにしようとしています

私は何が間違っているのですか?

最初のボタン

<asp:Button ID="LoginButtonInvis" runat="server"  CommandName="Login"
           ValidationGroup="Login1"
                visible ="false"/>
                </asp:Button>

2番目のボタン

          <button name="submit" runat="server"onclick="document.getElementById('LoginButtonInvis').Click();">                
                <i class="icon-arrow-right icon-large"></i>
            </Button>

取得するエラー:

Microsoft JScript runtime error: Unable to get value of the property 'Click': object is null or undefined

4

4 に答える 4

2

デフォルトでは、ASP.NET は親 ID をコントロールに追加して、要素の一意の ID を維持します。これは適切な動作です。

さらに、JavaScript では大文字と小文字が区別されます。イベントはすべて小文字から始まります。一部のブラウザーにはあるもの.click()とあるものが.onclick()あるため、以下のコードは、コードの他の部分を変更せずに提供できる最高のものです。

onclick="var b = document.getElementById('<%=LoginButtonInvis.ClientID%>'); if (b.click) b.click(); else if (b.onclick) b.onclick();"

また、2 番目のボタンが送信ボタンでないことを確認してtype="button"ください。そうしないと、フォームが 2 回送信されます。

編集: これは、ドキュメントに最初のボタンが存在する場合にのみ機能します。現在のコードでは、あなたが持っているために存在しVisible="false"ません。非表示のまま送信するには、 を削除Visible="false"してコード ビハインドに追加します。

LoginButtonInvis.Style["display"] = "none";

または、「display: none;」を使用して CSS クラスを適用します。ルール。

インライン JavaScript を避けるために、さらにクロス ブラウザー サポート (IE、はい) を改善するには、ページに JavaScript ブロックを追加することをお勧めします。

<script type="text/javascript">
function SimulateClick(buttonId) {
    var button = document.getElementById(buttonId);
    if (button) {
        if (button.click) {
            button.click();
        }
        else if (button.onclick) {
            button.onclick();
        }
        else {
            alert("DEBUG: button '" + buttonId + "' is not clickable");
        }
    } else {
        alert("DEBUG: button with ID '" + buttonId + "' does not exist");
    }
}
</script>

2番目のボタンにはこれだけがあります:

<button name="submit" onclick="SimulateClick('<%=LoginButtonInvis.ClientID%>');"><i class="icon-arrow-right icon-large"></i></button>

runat="server"また、2 番目のボタンは必要ないことにも注意してください。機能しなく<%=なり、事態が複雑になるだけです。

于 2013-01-16T15:00:40.847 に答える
0

別のアプローチを試す

送信ボタンをクリックしてJavaScriptを呼び出し、非表示の変数フィールドを設定します

function SetValue()
{
    //set hidden field value 
    form.submit();
}

どちらがイベントに制御をpage_load移しますか。値hidden fieldが設定されているかどうかを確認し、対応するコマンドを実行しLoginButtonInvisます。隠しフィールドをリセットすることを忘れないでください

お役に立てれば

于 2013-01-16T14:55:02.940 に答える
0

元のコードの唯一の問題は、クリック メソッドをすべて小文字にする必要があることだと思います。

onclick="document.getElementById('LoginButtonInvis').click();

于 2014-01-10T10:19:58.803 に答える