为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript 函数脱离了范围?“X 不是函数” “X 是 ”“ ”

Javascript 函数脱离了范围?“X 不是函数” “X 是 ”“ ”

至尊宝的传说 2022-08-04 16:53:37
我有一个JS函数,该函数在单击时调用,该函数传递一个字符串,并且第一个按钮有效,但是所有后续按钮都给我错误action is not a function (In 'action("upvote")', 'action' is "")其中 action 是函数的名称,upvote 是传递的变量。使用检查元素向我显示两个按钮是相同的,这是它们的外观<button type="button" onclick="action('upvote')">Like</button>最奇怪的是按钮在它调用函数之前,并且适用于所有按钮,而不仅仅是第一个按钮<button type="button" onclick="fun(84)">Reply</button>我检查了,我没有忘记关闭任何div或按钮我唯一能想到的是,我通过递归php函数来回显这些,我不认为JS函数有范围,但我不明白为什么第一个按钮工作而不是后续如果需要更多代码,请告诉我下面的代码是我对父 divs 的打印函数 echo "<div class='parent' style='margin-left:".$width."px'>".$x['comment']."    <div class='actions'>       <button  type='button' onclick='fun($ran)'>Reply</button>        <button type='button' onclick='action(\"upvote\")'>Like</button>         <button type='button'>Dislike</button>";    //Reply Like and Dislike are all actions every user gets, here I check which user it is to see if they can see the edit/delete    //Normally I would check for admin rather than id == 2, but there is only 1 admin and he id 2    if(($comment['userid'] == $_SESSION['id']) || $_SESSION['id'] == 2){         echo "<button type='button'>Edit</button>               <button type='button'>Delete</button></div>";//Close of actions div      }     else{        echo"</div>";//Close of actions div      }    $uname = mysqli_fetch_assoc($db->query("SELECT username FROM users WHERE id = ".$comment['userid']." "));    echo"    <div class='info'>    Score: ".$comment['score']." &nbsp; &nbsp; Posted By- ".$uname['username']."&nbsp; &nbsp At-".$x['created']." ";    if($x['edited'] != NULL){       echo"&nbsp; &nbsp; Edited Last-".$x['edited']." </div>";    }    else{       echo"</div>";    }?> </div> //Close of parent div这里仍然是我检查注释是否有任何回复注释的函数的一部分,如果是这样,我递归调用相同的函数,
查看完整描述

1 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

action中的内联事件处理程序引用包含单击元素的窗体的属性。它隐藏全局函数,为函数使用不同的名称,或者更确切地说,用于附加事件。您可以在代码段中看到该值。actionactionaddEventListener


function foo(a) {

  console.log(a);

}

<form>

  <button type="button" onclick="foo(action);">

    Click

  </button>

</form>


这背后的原因是,内联处理程序中的代码使用(或类似的内部作用机制)限定为事件目标元素,并且当从元素本身找不到给定的变量(实际上的属性)时,请查找祖先元素,直到找到该属性。如果未从元素中找到它,则要搜索的最后一个对象是 ,通过这种方式,它可以找到要执行的全局函数,前提是在升级到with (event.target) {...}windowwindow.


查看完整回答
反对 回复 2022-08-04
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信