1

現在開発中のこのウェブサイトで問題が発生しています。外部jsファイルの一連のコードの後に​​ボタンのクリックイベントを発生させようとしています。以下のコードを参照してください。

.ASPX:

<script type="text/javascript">
    var btn = $("#<%=btnRefresh.ClientID%>");
</script>

...

<asp:Button ID="btnRefresh" name="btnRefresh" runat="server" Visible="false" Text="btnRefresh" onclick="btnRefresh_Click" />

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
    <asp:GridView ID="myGrd" runat="server">...</GridView>
    <Triggers>
       <asp:AsyncPostBackTrigger ControlID="btnRefresh" EventName="Click" />
    </Triggers>
<asp:UpdatePanel>

.ASPX.CS:

protected void btnRefresh_Click(object sender, EventArgs e)
{
    myGrd.DataSource = null;
    myGrd.DataSource = GetData();
    myGrd.DataBind();
}

.JS:

function Refresh() {
    if (btn) {
        btn.click();
    }
    else {
        alert('false');
    }
}

基本的に、私が達成したいのはこれです:

  1. ページに追加、編集、削除を実装できるようになりました。(現在稼働中)
  2. 外部 JS ファイルのメソッドを呼び出して、追加、編集、削除のポップアップ ボックスを表示します。
  3. 成功したら、メソッドを呼び出してRefresh()、グリッドビューのみを更新します。
  4. Refresh()メソッドはbtnRefresh_Click、.aspx.cs ページからイベントを使用します。

他にどのようなオプションがあるのか​​ わからないので、その目的のためにボタンを使用しました.

今私の問題はこれです。私のコードはbtn、.aspx ページから変数を宣言できました。外部 .js ファイル内で実行すると、btn変数は次のようになります。

ここに画像の説明を入力

コンパイラは、分離コードからイベントbtn.click()を発生させるはずの行を通過します。btnRefresh_Clickただし、発火しません。

ここで何か不足していますか?私を助けてください。私はここで何時間も立ち往生しています。

4

5 に答える 5

1

ドキュメントが完全にロードされる前に取得するのではなく、必要なときにドキュメントが完全にロードされた後に btn オブジェクトを見つけようとしましたか?

変化:

<script type="text/javascript">
    var btn = $("#<%=btnRefresh.ClientID%>");
</script>

<script type="text/javascript">
    var btnid = "#<%=btnRefresh.ClientID%>";
</script>

そしてあなたのjs:

   function Refresh() {
     var btn  = $(btnid);
        if (btn) {
            btn.click();
        }
        else {
            alert('false');
        }
    }
于 2012-09-20T07:05:27.863 に答える
0

PostBackTriggerのAsynPostBackTriggerを変更すると、これが機能するはずです

 <asp:Button ID="btnRefresh" name="btnRefresh" runat="server" Visible="false"    Text="btnRefresh" onclick="btnRefresh_Click" />

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
<asp:GridView ID="myGrd" runat="server">...</GridView>
<Triggers>
   <asp:PostBackTrigger ControlID="btnRefresh" EventName="Click" />
</Triggers>

于 2012-09-20T07:08:41.240 に答える
0

ボタンを設定していますVisible="false"

<asp:Button ID="btnRefresh" name="btnRefresh" runat="server" Visible="false"

これを設定すると、画面にボタンがレンダリングされません。マークアップから要素が完全に削除されます。そのため、イベントを関連付けることはできません。この試行設定の代わりにs**tyle="display:none"..そうすると、画面にボタンがレンダリングされますが、表示されません..また、イベントが要素に添付されます..

更新 ::: Document.Ready 関数で btn にアクセスしてみてください.

<script type="text/javascript">
   $(function() {
       var btn = $("#<%=btnRefresh.ClientID%>");
    });
</script>

可能であれば、マークアップ全体と必要なコードを提供できますか..更新機能をどこで呼び出していますか

于 2012-09-20T06:41:17.207 に答える
0

私は最も簡単なことに行きます-問題はボタンを非表示にすることではなく、JavaScriptからクリックできる非表示のボタンを持ち、ボタンにイベントハンドラーを呼び出させることです。OPと同じハックがあります.style = display:none;を設定して、ボタンを永久に非表示にします。このようにして、ボタンがクライアント ページに存在し、私の JS がそれをクリックすると、サーバー上のボタン イベント ハンドラがポストバックで呼び出されます。これは、設定するまで Firefox で正しく動作しませんUseSubmitBehavior=Falseでした。今では IE と FF で動作します。

于 2012-09-20T06:48:09.610 に答える
0

クライアント側のonclickで見ているものは、サーバー側のOnClickで宣言しているものではないと思います。

クライアント側の onclick は、サーバー側の OnClientClick と同じです。

アップデート:

btn.click(); を使用して、サーバー側のクリック関数を呼び出すことができます。(使用しているものと同じ)が、これを実現するには、最初にコントロールの Visible プロパティを true に設定する必要があります。true に設定しないと、コントロールはクライアントにレンダリングされず、状態は維持されません。

最初にボタンを表示したくない場合は、Visible = "False" を設定する代わりに、Style="visibility:hidden"; と書くことができます。

したがって、ボタンの aspx マークアップは次のようになります。

<asp:Button ID="btnRefresh" name="btnRefresh" runat="server" Style="visibility:hidden" Text="btnRefresh" onclick="btnRefresh_Click" />
于 2012-09-20T06:59:17.447 に答える