我是否可以检查是否从按钮&x27;调用JavaScript函数;s onclick属性?

我是否可以检查是否从按钮&x27;调用JavaScript函数;s onclick属性?,javascript,Javascript,我有一个JavaScript函数,可以通过单击按钮或其他函数调用 我正在开发一个用香草JavaScript制作的简单游戏,我的功能如下: function end() { // End the game } 可通过单击按钮调用: <input type="submit" id="endBtn" value="End Game" onclick="end()"> 游戏可以通过用户单击按钮或满足pla

我有一个JavaScript函数,可以通过单击按钮或其他函数调用

我正在开发一个用香草JavaScript制作的简单游戏,我的功能如下:

function end() {
  // End the game
}
可通过单击按钮调用:

<input type="submit" id="endBtn" value="End Game" onclick="end()">
游戏可以通过用户单击按钮或满足play()函数中的某些条件来结束


是否可以知道该函数是否是通过单击按钮调用的?

实际上可能存在一种解决方法。为函数指定ex$notifier的字符串参数。 从按钮调用时,请单击将$notifier参数指定为“按钮”或任何有意义的参数。 因此,通过检查参数值,您可以了解函数从何处启动

function myFunction(notifier){
    if (notifier=='button'){
        // triggered from button
    }
    else if(notifier=='function'){
        // triggered from function
    }
}

在按钮->onclick=“myFunction('button')”

是的,可以评估它是否是通过单击按钮调用的,请参见以下内容:

btn=document.getElementById(“btn”);
testDiv=document.getElementById(“testDiv”);
btn.addEventListener(“单击”,()=>{
const payload=“从按钮调用”;
随机数fn(有效载荷);
});
函数randomFn(getInput){
testDiv.innerHTML=getInput;
}
点击

只需让函数接受类似“calledBy”的字符串,如:

在其他函数中传递“func”作为参数,而在按钮中传递“button”

在您的按钮中:

...onClick=myEvent('button')...

希望澄清一下,可能还有其他解决方案,但这是我想到的第一件事。

实现这一点的一种方法是在函数中添加另一个参数,使您能够区分源代码。也就是说,如果你有一个函数

function abc(argument1) {
//logic
}
你可以加上

function abc(argument1, argument2){
if (argument2 === 'button' {
  //some logic
}
//logic
}

如果您从按钮调用它,您可以使用
onClick:()=>abc(argument1,'button')
调用它,这样您就知道它来自按钮。如果在别处调用,您可以将参数provide从
'button'
更改为您喜欢的任何形式。

元素
中的
单击后将传递元素本身
所以你可以检查它是否是一个元素

功能测试(ele){
if(元素的元素实例){
log(“这是单击按钮调用”);
}否则{
log(“这是通过其他方式调用”);
}
}
test()

ck me
由于默认情况下,从事件调用的函数会自动传递事件值,因此可以检查
事件
值是否不等于
未定义的
。代码示例:

函数yourFunction(事件=未定义){ if(事件和类型)(事件)=“对象”){ 警报(“从元素调用”) }否则{ 警报(“未从元素调用”) } } yourFunction()

点击我我不太清楚你想做什么。但是,如果您确实必须记录/检查它是否是按钮单击或从其他函数调用的,则可以执行以下操作:

函数触发器FromFunction(d){
triggerClick(真);
}
函数触发器单击(comingFromFunction=false){
document.getElementById(“show”).innerHTML='来自函数='+来自函数;
}
触发点击
触发函数

您需要做的就是查看函数参数,特别是
event.type
,所有事件都将传递它,如果它没有参数,则必须直接调用它(尽管如果需要,您可以传递类型)

const-button=document.getElementById(“按钮”);
const result=document.getElementById(“结果”);
按钮。添加EventListener(“单击”,该功能);
按钮。添加EventListener(“鼠标悬停”,该功能);
按钮。添加了监听器(“鼠标出”,该功能);
函数函数(e){
如果(e&&e.type)result.innerHTML='from'+e.type
else result.innerHTML='没有类型,可能是函数()
}
函数({type:'foo'})
点击

否决票不太可能基于所问的主题,而是基于所显示的假定缺乏努力。你有什么代码示例要展示吗?你已经做了哪些研究?很可能是通过引入一个额外的参数来实现的。如果它是通过点击按钮来调用的。它应该通过一个事件。您可以推断事件参数是否存在(即它不是未定义的),也可以检查事件的target属性以查看它是否是特定的dom元素。只需将函数包装到另一个函数中,并在两个位置之一调用它,可能会更容易、更健壮。@evolutionxbox我道歉。我真的认为没有必要为这样的问题提供代码示例。我把这个放在里面mind@MilkTable别担心。如果有疑问,请查看常见问题解答。你介意分享一个代码示例吗?显示比告诉好得多。当然我会编辑答案测试div在代码段中不可见output@evolutionxbox是的,没错,它是隐形的。单击按钮后,它将使用innerHTML进行更新。我明白了,所以这不是为了演示单击非按钮元素吗?如果我要问的问题看起来很愚蠢,我提前道歉。函数(e)
中的if语句是否检查事件是否存在?
...onClick=myEvent('button')...
function abc(argument1) {
//logic
}
function abc(argument1, argument2){
if (argument2 === 'button' {
  //some logic
}
//logic
}