2

asp.net、JavaScript、HTML Handler を使用しています。

asp ボタンの onclick イベントで、このように JavaScript を呼び出しています。

<asp:Button ID="btn_Tagging" CssClass="button" UseSubmitBehavior="false"
     Text="Done" OnClientClick="DoneClick()" />

script タグ内の同じページで、次のように JavaScript を記述しました。

<script type="text/javascript">
function DoneClick()
{
   var checkLocation = "";
   var txtMM = document.getElementById("hdn_Tagging").value;///Id s of textbox assigned in code behind MB--
   txtMM = txtMM.slice(0, -1);
   var arrTxtMM = txtMM.split(",");
   for(var j=0;j<arrTxtMM.length;j++)
   {
      var Loc = document.getElementById(arrTxtMM[j]).value;
      if(Loc == "")
      {
         checkLocation = "";
         break;
      }
      else
      {
         checkLocation += Loc + ":";
      }
   }
   if(checkLocation != "")
   {
      var url ='Handler/newExifDetails.ashx?Id='+txtMM+'&Location='+checkLocation+'';
      var completetbl, html;
      $.getJSON(url,function(json)
      {
         $.each(json,function(i,weed)
         {
            var res = weed.res;
            alert(res);
            if(res == null)
            {
            }
            else
            {   
               window.top.location.href = "Dashboard.aspx";
            }
          });        
       });

    }
    else
    {
       alert("Please pick the locations for all objects");
    }
 }
</script>

次に、ボタンをクリックすると、JavaScript 内のアラートは、Firebug または Chrome 開発者ツール スクリプトにブレークポイントを配置した場合にのみ表示されます。そのブレークポイントを配置しないと、アラートは表示もリダイレクトもしません。

4

2 に答える 2

0

input type="button"の代わりにプレーンコントロールを使用してみてくださいasp:Button。または、ボタンを次のように書き直します。

<asp:Button ID="btn_Tagging" CssClass="button" UseSubmitBehavior="false"
     Text="Done" OnClientClick="DoneClick(); return false;" />

問題は$.getJSON関数の非同期成熟にあるため、実行コンテキストはDoneClick関数を終了し、呼び出された__doPostBack関数はasp.netインフラストラクチャによってbtn_Tagginghtmlコントロールのonclick属性に追加されます。

于 2012-09-21T15:44:50.557 に答える
0

古典的なハイゼンバグです。生成された HTML コードでボタンがどのように見えるかを示していただけると助かります。単純なアラートをクリック ハンドラーとして使用してみましたか? JavaScript でハンドラーを動的に追加しようとしましたか?

追加してみてください:

$('#btn_Tagging').click(DoneClick);

また:

$(function() { $('#btn_Tagging').click(DoneClick); });

JavaScript コードの最後で、次を削除します。

OnClientClick="DoneClick()"

ASPから。

生成された HTML ボタンはid"btn_Tagging" を取得すると思いますが、正しいですか? それが機能しない場合は、ASP コードを表示するのではなく、代わりにブラウザーに表示される生成された HTML を表示してください。最も重要なのは、そのvalue属性が何であるかです。

(また、あなたはすでに AJAX に jQuery を使用しているため、DOM 操作にも jQuery を使用することをお勧めします。この方法では、間違いを犯しやすく、既に読み込まれているライブラリを使用していません。この返信を参照してください。getElementById注意しないとバグが入りやすい例です。)

于 2012-09-21T11:10:17.560 に答える