簡體   English   中英

JavaScript錯誤中的匿名函數

[英]anonymous function in javascript error

我正在嘗試運行一個非常基本的代碼:

<a href="#" onClick="function(event){
   event.preventDefault();
   document.getElementById('LogOut-form').submit();
 }">LogOut</a>

我什至不是很確定,如果這是正確的,但是當我單擊鏈接時,我確實看到了錯誤。

未捕獲到的SyntaxError:意外令牌(

我只想使用這樣的方式提交表單,是否缺少某些內容? 如果可以,那將是什么解決方案?

當您使用onClick聲明函數時,請使用IIF表達式

 <a href="#" onClick="(
                 function(event){
                    event.preventDefault();  
                    document.getElementById('LogOut-form').submit();
                 })(event) 
          ">LogOut</a>

<a href="#" onClick="(function(event){event.preventDefault();document.getElementById('LogOut-form').submit();})(event)">LogOut</a>

或不使用函數表達式

<a href="#" onClick="event.preventDefault(); document.getElementById('LogOut-form').submit();">LogOut</a>

但是,我建議您擺脫難看的內聯單擊處理程序,並且不要在老舊的壞習慣中使用內聯單擊處理程序。 您應該使用addEventListener綁定事件

的HTML

<a href="#" id='logout'>LogOut</a>

腳本

document.querySelector('#logout').addEventListener('click', function(event){
    event.preventDefault();
    document.getElementById('LogOut-form').submit();
}, false);

您不應再使用html元素的on屬性。 而是像在Satpal的答案中那樣使用addEventListener

在單擊鏈接時會評估onclick ,因此,如果您真的想使其生效,則需要將其編寫為立即調用的函數表達式:

<a href="#" onClick="(function(event){
   event.preventDefault();
   document.getElementById('LogOut-form').submit();
 })(event)">LogOut</a>

但是您真的不應該那樣做。 您應該始終將html,js和CSS分開。

 <a href="#" onClick=" event.preventDefault(); document.getElementById('LogOut-form').submit(); ">LogOut</a> 

要么

 function sendData (event) { event.preventDefault(); document.getElementById('LogOut-form').submit(); } 
 <a href="#" onClick="sendData()">LogOut</a> 

您嘗試在其中使用函數表達式的上下文期望function關鍵字啟動函數聲明。

函數聲明必須具有名稱。

無論如何,在其中放置一個函數毫無意義:您永遠不會調用它。

onclick屬性的值是函數主體。

如果您打算沿着這條路線走,那么您的代碼將如下所示:

onclick="event.preventDefault(); document.getElementById('LogOut-form').submit();"

但是不要那樣做!


內在事件屬性由於多種原因而令人恐懼。 將事件處理程序與JavaScript綁定。

<a href="#">LogOut</a>

document.querySelector("a").addEventListener("click", function(event){
   event.preventDefault();
   document.getElementById('LogOut-form').submit();
});

但是也不要這樣做!


您具有指向頁面頂部的鏈接,然后使用JavaScript“增強”該表單來提交表單。

如果JavaScript失敗,則鏈接到頁面頂部沒有任何意義。

在應用JavaScript之前: 選擇具有最適當語義和默認功能的HTML

在這種情況下,這意味着使用提交按鈕

<button>LogOut</button>

如果您不喜歡它的外觀,請應用CSS對其進行樣式設置。

 button { text-decoration: underline; color: blue; background: none; border: none; padding: 0; display: inline; } 
 <button>LogOut</button> 

您在onClick聲明了函數,應該調用它。 在外部定義函數,然后像myFunction()一樣從onClick調用它。

我認為您不能以這種方式直接調用函數,因為該代碼試圖創建一個新函數,而不是執行該函數。 您應該在某個地方創建一個函數,並在onclick事件中調用它。 例如:

    function myFunction(evt) {
        evt.preventDefault();
        document.getElementById('LogOut-form').submit();
    }

    <a href="#" onClick="myFunction">LogOut</a>

如果要將click事件直接綁定到HTML元素,則應使用如下所示的標准方法:

<html>
   <head>
   </head>
   <body>
     <form id="LogOut-form" type="submit"></form>
     <a href="#" onClick="buttonClicked(event)">LogOut</a>
   </body>
   <script>
     function buttonClicked(event){
       event.preventDefault();
       document.getElementById('LogOut-form').submit();
     }
   </script>
</html>

在此, buttonClicked()是一個函數,只要單擊觸發就將調用該函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM