Jquery-如何将事件作为click函数的参数来处理

时间:2014-10-05 23:28:40

标签: javascript jquery

我有一个点击事件,我的操作导航到某个网址,然后显示/隐藏按钮。我正在使用这个:

ViewManager.js

$("#btn").on("click", function(event){
    window.location.href= '#test.html';
 }

在我导航到该页面后,我有一个按钮,我需要根据target.id显示隐藏。(在这种情况下为btn)。如果btn是目标ID,我隐藏按钮,否则我会显示按钮,如下所示:

account.js

if (event.target.id == 'btn'){
        $('#submit-account-detail').css('display', 'none');
        else {
       $('#submit-account-detail').css('display', 'block');
        }

现在问题是,chrome完全处理全局事件,但firefox抛出错误:

ReferenceError: event is not defined

在导航到其他网址之前,我将事件作为参数传递。由于firefox不会在全局处理事件,因此会抛出错误。我尝试查找源代码,他们建议将事件作为参数传递给click事件(已经完成)。但是在页面导航之后,如何才能使事件可见?

EDIT -------------------

我在ViewManager.js脚本中执行了类似的操作:$("#btn").on("click", function(event){ targetId = window.event; window.location.href= '#test.html'; }

然后我在account.js脚本中测试了条件:

if (targetId && targetId === 'btn'){
            $('#submit-account-detail').css('display', 'none');}

当它定义了targetId时它可以正常工作,但是当它ReferenceError: targetId is not defined时抛出targetId != 'btn' ......我是以错误的方式声明var吗?

1 个答案:

答案 0 :(得分:0)

页面导航后,您无法在新页面中显示旧事件对象。不过,您可以在get请求中或通过设置cookie传递有关上一个事件的信息。

在这里,看起来你只是改变了位置的哈希值。正确的方法是window.location.hash = "#something"。在这种情况下,您的页面实际上不会重新加载。这意味着如果设置全局变量,则可以从其他函数访问它。

有多种方法可以定义全局变量。

  1. 在任何函数之外写var varname,并将varname设置为任意值。
  2. window.varname设置为任意值。
  3. 您只需使用varname就可以使用此变量,除非您有另一个同名的局部变量。

    我的情况,请尝试在事件处理程序中设置window.event = event