【问题标题】:Kill sessions on browser/tab close在浏览器/标签关闭时终止会话
【发布时间】:2010-12-22 10:48:28
【问题描述】:

我一直在尝试解决how to close session when browser/tab is closed。按照 Daniel Melo 的回答 + 将会话的 coockie TTL 设置为 0,我几乎准备好了,但 Daniel 的提示不适用于 input type=[button]

var validNavigation = false;

function endSession() {
    document.cookie = 'MYOWNSESSID=; path=/';
}

function okEvent(){
     validNavigation = true;
  }

function wireUpEvents() {

  window.onbeforeunload = function() {
      if (!validNavigation) {
         endSession();
      }
  }

  $("a").bind("click", okEvent );

  $("form").bind("submit", okEvent );

  // that's my adds that don't work
  $(":button").bind("click", okEvent );
  $(":button").bind("submit", okEvent );
  $(":button").onclick= okEvent;
}


// Wire up the events as soon as the DOM tree is ready
$(document).ready(function() {
    wireUpEvents();
});

在卸载发生之前将事件标记为有效的键。我试图钩住按钮点击但没有成功。 jquery 选择器工作正常,我检查了 $(':button').length 是否 > 0。 当然我错过了一些东西,但找不到它。

【问题讨论】:

  • 您的代码没有问题...实际上不需要您的添加,因为您在表单上的提交事件上调用okEvent 函数。无论如何,您可以在 okEvent 中放置并警告以检查它是否真的设置了标志?
  • 感谢 ifaour。你所建议的正是我所做的。我在 okevent() 上发出了警报,所以我知道它什么时候被调用,除了输入类型 [button] 之外,它工作正常。

标签: javascript session input click onclick


【解决方案1】:

好的,这里有一些提示:

-将您添加的三行替换为:

$(':button').click(okEvent);

-不要在按钮输入上绑定提交事件,不要与提交输入混淆(more):

<input type="submit" value="Submit" />

-如果您使用 Button 提交表单,请改用提交输入并删除所有添加,因为提交事件已附加到表单:

$("form").bind("submit", okEvent );

请检查this 测试以更好地理解按钮输入。

【讨论】:

  • 感谢您的回答。我没有使用按钮提交,有一个提交输入和一个取消表单编辑的按钮。 $(':button').click(okEvent);
  • 请看这个,你会看到我需要包装原始点击,对于我当前的级别来说有点复杂,jsfiddle.net/carlosmora/zkG9u
  • 改变你的例子问题显示:按钮的onclick在okEvent之前执行以验证执行,所以问题似乎减少到改变顺序并将原始事件处理程序放在之后执行. jsfiddle.net/carlosmora/ZnBUU
  • 你不应该这样做,而是使用回调来确保一切都会在应该执行的时候执行:example link
  • 没错,就是这样,但我需要透明地包装页面事件,而不需要重新编码每个按钮。我的目标是验证卸载事件,因此如果导航不是从页面元素进行的,则会话将被终止。重新编码每个按钮是一个解决方案,但我正在寻找一些自动的东西,比如锚点和提交。
猜你喜欢
  • 2015-04-23
  • 1970-01-01
  • 2012-02-24
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 2015-06-18
  • 2011-10-03
  • 1970-01-01
相关资源
最近更新 更多