按钮点击事件不是从javascript触发

时间:2012-09-13 10:10:20

标签: c# jquery asp.net onclick

我需要进行回发并在屏幕关闭时将屏幕中的数据保存到会话中,为此我使用onBeforeUnload事件,并在屏幕中放置一个隐藏按钮。在卸载前的事件中,我调用click事件来调用按钮服务器事件。但事件并未触发。我在这里缺少什么。

<asp:Button Style="display: none" runat="server" ID="btnHidUpdate" OnClick="btnHidUpdate_Click" />
<script type="text/javascript">
  $(document).ready(function () {
    window.onbeforeunload = updateSessionBeforeUnload; 
  });
</script>

在.js文件中:

function updateSessionBeforeUnload() {
  var hidUpdate = $('[id$="btnHidUpdate"]')[0];
  hidUpdate.click();
}

在.cs代码背后:

protected void btnHidUpdate_Click(object sender, EventArgs e)
{
  UpdateSession();
}

4 个答案:

答案 0 :(得分:1)

问题是页面在执行按钮点击之前加载下一页。

使用Jquery Unload事件,例如

$(function(){
    $(window).unload(function(){
       // put synchronous code here to persist what you need.
    });
});

您可以像Yuriy一样使用Ajax事件,但是您必须将async设置为false,如下所示:

      $.ajax({
           type: "POST",
           url: "Url/To/Persistance",
           dataType: "json",
           data : { "data" : "to be persisted"},
           async: false
      });

修改 我会一起避免点击事件,并做这样的事情:

$(function(){
    $(window).unload(function(event){
       var hidUpdate = $('[id$="btnHidUpdate"]')[0];
       __doPostBack(hidUpdate.attr('id'),'');
    });
});

但是,如果您必须,请点击按钮,试试这个

$(function(){
    $(window).unload(function(event){
       var hidUpdate = $('[id$="btnHidUpdate"]')[0];
       hidUpdate.click()
       alert(
         "Default: " + event.isDefaultPrevented() + "\n" + 
         "ImedPropStopped: " + event.isImmediatePropagationStopped() + "\n" + 
         "PropStopped: " + event.isPropagationStopped()
       );
    });
});

并告诉我们警报说的是什么?

答案 1 :(得分:1)

我认为这里的其他建议应该可行。我有另一个建议,您可以尝试,并使用GetPostBackEventReference。 你可以在这里看到它的详细信息: http://msdn.microsoft.com/en-us/library/aa720417(v=vs.71).aspx

答案 2 :(得分:0)

您可以使用jquery触发器(“click”)函数调用按钮上的click事件。

答案 3 :(得分:0)

在我看来,问题是onbeforeunload事件处理程序旨在要求用户在他想要离开页面时进行确认。并且由于updateSessionBeforeUnload方法不返回任何问题字符串,因此在此方法离开后立即继续卸载过程。

如果您可以将UpdateSession方法设为静态,则可以使用异步jQuery.ajax方法调用异步调用它:

<script type="text/javascript">
     window.onbeforeunload = foobar;

     function foobar() {
          $.ajax({
               type: "POST",
               url: "WebForm2.aspx/UpdateSession",
               contentType: "application/json; charset=utf-8",
               dataType: "json",
               async: true
          });
     }
</script>

[WebMethod]
public static void UpdateSession()
{
}