2

我正在使用 asp.net、JavaScript 和 HTML 处理程序。

在 asp 按钮 onclick 事件中,我像这样调用 JavaScript。

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

在脚本标记的同一页面中,我编写了这样的 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

这是一个经典的heisenbug。如果您可以向我们展示按钮在生成的 HTML 代码中的外观,将会有所帮助。您是否尝试使用简单的警报作为点击处理程序?您是否尝试在 JavaScript 中动态添加处理程序?

尝试添加:

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

或者:

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

在您的 JavaScript 代码末尾并删除:

OnClientClick="DoneClick()"

来自 ASP。

我假设生成的 HTML 按钮获得id“btn_Tagging” - 我正确吗?如果它不起作用,那么不要向我们展示您的 ASP 代码,而是向我们展示生成的 HTML,它会进入浏览器,最重要的是:它的value属性是什么。

(另外,由于您已经将 jQuery 用于 AJAX,我建议您也将 jQuery 用于 DOM 操作。这样做更容易出错,而且您没有使用已经加载的库。请参阅此回复getElementById如果您不小心,甚至很容易引入错误的示例。)

于 2012-09-21T11:10:17.560 回答
0

只需尝试使用普通input type="button"控件而不是asp:Button. 或重写您的按钮,如下所示:

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

问题在于$.getJSON函数的异步成熟,所以在它调用之后,执行上下文离开了DoneClick函数,并且被调用的函数被 asp.net 基础设施__doPostBack添加到 btn_Tagging html 控件的属性中。onclick

于 2012-09-21T15:44:50.557 回答