如何确定参数是否为点击事件
How to decide if a parameter is the click event
我有一个函数,可以通过单击事件或直接调用。当我直接调用它时,我需要向它传递一个数据参数,所以我定义了接受参数的函数,以考虑对该参数的直接调用。
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");
}
相关文章:
- 如何检测滚动事件是否像在触摸设备上一样只触发一次
- node.js测试事件是否是在不使用超时的情况下使用sinon.js发出的
- 如何查明鼠标按下事件是否发生在滚动条上或元素中的其他任何位置
- 我能从“;输入“;事件是否有更好的方法来跟踪文本更改
- 此multi-onChange事件是否有效
- 如何使用javascript检查事件是否应用于元素
- React/flux - 子组件用户事件 - 是否应通过调度程序路由所有内容
- webglcontextcreatenerror事件:是否同步触发
- 如何在表单提交时检查firebase推送事件是否成功
- 测试React中的点击事件是否会更新HTML
- jqueryangularjs如何知道鼠标按下事件是否是由浏览器的滚动条触发的
- 重新触发Javascript事件是否安全
- 在开放层 3 中完全渲染地图视图后,事件是否会触发
- JS:如何识别鼠标事件是否由触摸(而不是鼠标)提供
- 如何知道事件是否是在带有 GAS 的 Google 日历中创建的
- 如何检测点击事件是否已由“Enter”触发
- “blur”事件是否仅针对 HTML 表单对象触发
- onblur - 如何分辨点击的内容;或者如何判断 onClick 事件是否正在等待运行
- 检查事件是否已绑定(KEYUP)
- 在backbonejs视图中,keypress/keyup/keydown事件是否仅适用于输入,而不适用于其他元素