猿问

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

我有一个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

这里仍然是我检查注释是否有任何回复注释的函数的一部分,如果是这样,我递归调用相同的函数,



至尊宝的传说
浏览 83回答 1
1回答

PIPIONE

action中的内联事件处理程序引用包含单击元素的窗体的属性。它隐藏全局函数,为函数使用不同的名称,或者更确切地说,用于附加事件。您可以在代码段中看到该值。actionactionaddEventListenerfunction foo(a) {&nbsp; console.log(a);}<form>&nbsp; <button type="button" onclick="foo(action);">&nbsp; &nbsp; Click&nbsp; </button></form>这背后的原因是,内联处理程序中的代码使用(或类似的内部作用机制)限定为事件目标元素,并且当从元素本身找不到给定的变量(实际上的属性)时,请查找祖先元素,直到找到该属性。如果未从元素中找到它,则要搜索的最后一个对象是 ,通过这种方式,它可以找到要执行的全局函数,前提是在升级到with (event.target) {...}windowwindow.
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答