我有一个可以通过点击事件或直接调用的函数。当我直接调用它时,我需要传递一个数据参数,所以我已经定义了函数来接受一个参数来考虑直接调用参数。
function myFunc(param){
}
在函数中,我需要区分函数是直接调用还是来自click事件,所以我认为我可以简单地检查是否设置了param。如果已设置,则直接调用该函数。如果未设置,则从click事件中调用它。
问题是默认情况下,click事件会传递一个事件对象。因此,即使click事件调用该函数,param也不会为null。
那么有没有办法检查传递的参数是否是点击事件?
答案 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 强>