如何确定参数是否为click事件

时间:2012-06-02 03:41:52

标签: javascript jquery

我有一个可以通过点击事件或直接调用的函数。当我直接调用它时,我需要传递一个数据参数,所以我已经定义了函数来接受一个参数来考虑直接调用参数。

function myFunc(param){

}

在函数中,我需要区分函数是直接调用还是来自click事件,所以我认为我可以简单地检查是否设置了param。如果已设置,则直接调用该函数。如果未设置,则从click事件中调用它。

问题是默认情况下,click事件会传递一个事件对象。因此,即使click事件调用该函数,param也不会为null。

那么有没有办法检查传递的参数是否是点击事件?

5 个答案:

答案 0 :(得分:2)

您无需复制任何代码。执行此操作的正确方法是使用事件处理程序处理click事件,以及要在另一个函数中执行的操作。例如:

// define main action
var doSomethingUseful = function(is_clicked) {
  // write some code here
}

// define click handler
var myBtnClicked = function(e) {
  doSomethingUseful(true);
}

// bind click event
$('#my_button').click(myBtnClicked);

虽然正如您已经提到过的那样,您需要知道该信息通常这是一个警示标志,表明可能有更简单的方法来做事。

编辑,例如:

// define main action
var doSomethingUseful = function() {
  // write some code here that doesn't care "why" it's being called
}

// define click handler
var myBtnClicked = function(e) {
  // do the click-only stuff

  // call the generic function
  doSomethingUseful();
}

// bind click event
$('#my_button').click(myBtnClicked);

答案 1 :(得分:1)

IE 9之前的版本并不总是传递事件参数,因此如果从IE点击调用它,则参数将是未定义的。

function myFunc(param){
if(!param) || param.clientX)// not called with a data param
}

您最好检查数据而不是事件。

答案 2 :(得分:0)

检查传递给click事件的.clientX属性。

  function(param){

   if(param.clientX){//this is a click event}
    else
    {//this is a call event};

};

你可能想要使用这个。

   function(param){

       if(param.target){//this is a click event}
        else
        {//this is a call event};

    };

答案 3 :(得分:0)

jQuery(document).ready(function(){
    $('#someID').click(function(){ 
        myFunc(true);
    });
    myFunc();
});

function myFunc(param){
    param ? alert("click"):alert("not click");
}

答案 4 :(得分:0)

function myFunc(param) {

    // which (aka keyCode) is a property set to params
    // by jQuery for any event


    // Check for object make you free to pass parameter 
    // as object also with string, array and so on

    if (Object.prototype.toString(param) == '[object Object]' && param.which) {
        // called by clck
        console.log(param.which);
    } else {
        // called by function
        console.log(param);
    }
}

$('#clickable').click(myFunc)

// passing parameter as object
myFunc({
    a: 'abc',
    b: 'def'
});​

// passing parameter as string
myFunc('Hello');

// passing parameter as array
myFunc([1, 2, 2]);

等等。

<强> DEMO

相关问题