基于先前调用的函数调用函数

时间:2014-11-25 23:07:27

标签: javascript jquery

是否有调用函数的时候,例如按一个模态窗口上的关闭按钮,根据打开模态窗口的功能,它会采取不同的动作?

所以说例如我们有一个登录页面,其中包含要点击的项目,在模态窗口中显示该项目的图像,并且当从该上下文打开图像时调用了某个函数,并且我们有一个搜索侧导航显示项目的栏,当点击这些项目时,打开模态窗口的功能与第一个不同。现在关闭模态窗口时,根据调用打开模态的函数,我想写一个条件,允许我返回登录页面或返回侧导航栏。

我没有任何代码可以显示,但我想知道这样的事情是否可行;根据以前调用的函数编写条件?那条件的命令是什么?

所以

function 1 () {
doSomething;
}

function 2 () {
doAnotherThing;
}

$("closeButton").on('click', function () {
if (function 1 was called) {
// do something else
} else if (function2 was called) {
// do another thing
}
}

这样的事情可能吗?

5 个答案:

答案 0 :(得分:2)

在MVC框架中,您可以将属性绑定到相关视图。如果没有,您始终可以将绑定状态保持为窗口对象。

如果您也不想这样做,您可以将DOM中的状态(关闭按钮)保留为属性。例如,数据属性。

$("closeButton").on('click', function (e) { 
    var state = $(e.currentTarget).data("state"); 
}

答案 1 :(得分:2)

var fnClicked = null

function fn1() {
  fnClicked = fn1;
  doSomething();
}

function fn2() {
  fnClicked = fn2;
  doAnotherThing();
}

$('closeButton').on('click', function(){
  if (fnClicked === fn1) {
    //do something else
  } else if (fnClicked === fn2) {
    //do another thing
  }
});

或者,您可以让fn1和fn2取消绑定closebutton click事件并将其重新绑定到相应的后续行程。

答案 2 :(得分:1)

您可以在模态元素上使用data attributes来存储指示打开模态的区域的信息。然后在关闭模态时,查看该属性并根据打开模态时存储的值确定要执行的操作。

答案 3 :(得分:1)

变量可以在Javascript中存储对函数的引用。所以我会让function1设置一些内部变量,当你关闭模态时会检查它:

var calledBy;

function1 () {
  calledBy = function1;
  //open modal
}

function2 () {
  calledBy = function2;
  //open modal
}

$("closeButton").on("click", function () {
  if(calledBy === function1) {
  //...
  } else if(calledBy === function2) {
    //...
  }
});

但正如hyperstack所指出的那样,它有一个更好的组织来打开模态并传入一个参数。我会有一个模态的对象:

var modal = {
  //...
  calledBy: null,
  open: functio (calledBy) {
    this.calledBy = calledBy;
  }
};

答案 4 :(得分:0)

您可以使用' this'特殊关键字,用于引用调用方法的对象。

EG。

<div class="cval">
    test
</div>

<script>    
        $(".cval").click(function (e) {

            e.preventDefault();
            alert($(this).attr('class'));
            if($(this).attr('class') == 'cval')
             //dosomething
            else
             //dosomething
        });
</script>

询问任何元素属性的值,然后使用条件来控制流。