2013-06-05 77 views
9

what is the difference between<a onclick="someFunction"> and <a onclick="someFunction()">

<a onclick="someFunction">

and

<a onclick="someFunction()">

One uses the parenthesis and not the other, but what are the differences of using either? What is the "correct" option? And what happens if i dont use any href attribute?

As far as I know, in javascript, using something = someFunc(); assigns the return value of that function to the something variable. And using something = someFunc; assigns the function directly (not its result) to that variable (And it's mostly used to assign functions to events). e.g. I can assign a function to a onclick event.

But what I don't understand is what happens when using either in some html element inline event, as in the examples, since the assignation is not to a javascript variable, but to an html attribute, which happens to be an event? Please explain.

And also, is there a difference on assigning a inline onclick function to an anchor (a) that to other elements (e.g. span div label etc)? Do they have the same effect?

Sidenote: I've been reading here關於如何在點擊某個鏈接時運行某個功能的區別是什麼,我已經瞭解到應該是而不是可以「內聯」完成,而是使用不顯眼的javascript。 (我提到它是爲了避免對此發生爭論),但在我看到的例子中,他們沒有提到我在內聯中提到的兩個選項的區別。

編輯:這個問題是因爲here他們給出了一個答案,它沒有在事件的函數中使用括號,也沒有人提到括號是需要的,所以我認爲它是有效的。但我不知道使用()與否有什麼不同。

+0

'什麼是「正確的」選項?'既不使用['node.addEventListener'](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget。addEventListener) –

回答

4

一個使用括號而不使用另一個,但使用哪一個的區別是什麼?

<a onclick="someFunction">不會做任何事情。圓括號導致函數爲,稱爲

只有一個標識符(無論是函數名稱,變量還是其他)都不會做任何事情(除非拋出一個引用錯誤,如果該變量不存在)。

如果我不使用任何href屬性會發生什麼?

那麼我會問你爲什麼首先使用<a>元素。

另外,是否有一個內聯onclick函數分配給錨點(a)對其他元素(例如跨度div標籤等)的區別?

只有它們不是(默認情況下)可聚焦元素(也不是沒有href屬性的元素),所以無法通過標記元素並按下Enter鍵來觸發click事件。如果你想要一個在JS觸發時會做某些事情的元素,並且當JS不可用時你沒有明智的回退,使用一個按鈕。

+0

所以,如果不使用parethesis是「錯誤」(因爲它不會做任何事情)意味着接受的答案[這裏](http://stackoverflow.com/questions/688196/how-to-use-a-link -to-call-javascript)簡直是錯誤的? (這個答案精確地使我提出了我的問題,但沒有找到鏈接,我會在這裏編輯我的問題,以反映) – DiegoDD

+0

@DiegoDD我認爲'jsFunction'意思是'myFunction()'而不是它的名字。 –

+0

@DiegoDD - 表達不好。當它表示「jsfunction」時,它可能意味着「函數定義的主體」。不要使用'onclick'屬性, 遵循[Progressive Enhancement](http://en.wikipedia.org/wiki/Progressive_enhancement)和[Unobtrusive JavaScript](http://en.wikipedia.org/)的原則。維基/ Unobtrusive_JavaScript)。使用'addEventListerner'或一個爲了與舊瀏覽器兼容而對其進行抽象的庫綁定事件處理程序。 – Quentin

1

事件處理程序屬性的值是一系列Javascript 語句,而不是表達式。

它沒有分配函數值的屬性;這是在該事件中執行的一段代碼。
如果省略括號,則會生成無效的表達式語句。

+0

爲什麼這會降低投票率? – SLaks

+0

您能否更具體地說明聲明和表達式之間的區別? – DiegoDD

+0

@DiegoDD:Statement是一個完整的可執行「代碼行」。表達式是具有值的單個代碼片段。 – SLaks

1

當在點擊函數上寫入內聯函數時,我們在單擊元素時指定要以字符串形式執行的代碼。

它等同於eval('someFunction()'); 我們不能在click ='someFunction'上寫字,因爲它相當於eval('someFunction'),它不會執行任何操作。 如果您打算將點擊處理程序綁定到錨點標記,請不要忘記向錨點標記添加href ='#'屬性。

與錨點標記相比,將點擊處理程序分配給跨度或div沒有區別。

相關問題