如何确定参数是否为点击事件

How to decide if a parameter is the click event

本文关键字:事件 是否 何确定 参数      更新时间:2023-09-26

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

function myFunc(param){
}

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

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

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

不需要复制任何代码。执行此操作的正确方法是使用事件处理程序处理 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);
版本

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

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

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

检查传递给

单击事件的 .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};
    };
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]);

等等。

演示

jQuery(document).ready(function(){
    $('#someID').click(function(){ 
        myFunc(true);
    });
    myFunc();
});
function myFunc(param){
    param ? alert("click"):alert("not click");
}