0

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

function myFunc(param){

}

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

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

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

4

5 回答 5

2

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

// 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);
于 2012-06-02T03:54:50.253 回答
1

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

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

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

于 2012-06-02T04:19:28.683 回答
0
jQuery(document).ready(function(){
    $('#someID').click(function(){ 
        myFunc(true);
    });
    myFunc();
});

function myFunc(param){
    param ? alert("click"):alert("not click");
}
于 2012-06-02T04:36:18.637 回答
0

检查传递给单击事件的 .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};

    };
于 2012-06-02T03:47:14.640 回答
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]);

等等。

演示

于 2012-06-02T04:52:05.453 回答