iT邦幫忙

0

關於Javascript function 的問題

  • 分享至 

  • xImage

小弟剛轉寫MVC不久,因為之前都是寫VB.NET其實對於Javascript的了解也不深。

目前遇到一個問題是,當我執行完.on('cliCK',function() .click(function() 又或著是.bind('click',function 只要頁面不刷新我的按鈕都是會記憶上一次的動作,導致執行2次甚至更多次(這裡又有一個奇怪的現象,有時候是之前的值會執行一次然後在執行當下的值,有時候是當下的值執行兩次),因為在VB.NET中我知道我每次動作完都是會posback達到當前頁面的狀態是乾淨的。

在這裡小弟有兩個疑問想要提出,第一個問題是到底
(1).on('cliCK',function()
(2).click(function()
(3).bind('click',function()
有什麼不同,在哪種情境下會選擇何種使用。

第二個就是我目前遇到的困境,我要怎麼樣去解決掉當我頁面不刷新時二次執行該動作時只執行當前動作,我原本以為return出function應該就能解決問題,目前看起來並非如此。

希望各位先進能幫助我解答感恩。

看更多先前的討論...收起先前的討論...
神Q超人 iT邦研究生 5 級 ‧ 2017-10-23 14:36:23 檢舉
http://harttle.com/2015/06/26/jquery-event.html
這篇文章給你參考,在JQ中.on才是最後事件的綁定者
baida0630 iT邦新手 4 級 ‧ 2017-10-23 15:14:43 檢舉
感謝,很有幫助
baida0630 iT邦新手 4 級 ‧ 2017-10-23 16:23:32 檢舉
我參考過後的做法是 當我事件做完的時候 會重新進入頁面事件當中並且針對click事件unbind一次 ,不知道這是否是常規的用法呢?
神Q超人 iT邦研究生 5 級 ‧ 2017-10-23 16:46:16 檢舉
其實我不太曉得他會跑兩次的原因,但是基本上應該是不會有這種情況的,所以也不會需要做unbind,如果你願意的話可以用訊息討論一下^^
froce iT邦大師 1 級 ‧ 2017-10-23 18:14:43 檢舉
感覺要看你code才會知道問題在那。
神Q超人給的連結很有用,不過實際上我在用都是用on代替click了。
用click對動態產生的DOM會無法作用。
baida0630 iT邦新手 4 級 ‧ 2017-10-24 10:12:10 檢舉
應該說 我的事件都是在沒有重新整理的狀態下產生,click以後重新畫出我的畫面,這個時候我畫面上的東西在click的function其實是沒有作用的,因為click裡面並沒有再一次的click事件,所以我在click以後當我動作執行完我就再重新load頁面之外再重新導入一次有click事件的那個function,這個時候我第一次的click沒有解綁,所以導致我的事件做了兩次,事情的來龍去脈大概是這樣,所以我這邊在
初始的那個function中做了解綁的動作再去把畫面load出來就解決了
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
牙膏大師!
iT邦新手 4 級 ‧ 2017-10-23 16:31:53
最佳解答

可以參考這裡

至於你提到的 bind 在 js 裡面其實是用來處理 this 的問題的,
別把它與綁定事件用的 addEventListener 或者一些 library 提供的 on 搞混哦~
可以參考這裡

Rach iT邦新手 4 級 ‧ 2017-11-22 01:50:19 檢舉

bind在1.8.x被on取代,所以應該是一樣的,可以參考一下官方文件,樓主指的bind的應該是jquery的,舊版有重複訂閱的bug,但bind應該是被標deprecated被刪除了,可以使用我也滿訝異的。

哇謝謝你的補充!我在回應的時候沒注意到原po提的都是jquery的api就倉促的回應了...。但的確,根據官方文件bind在jquery 3.0被一除了,也許原po使用的並不是最新的版本(?

baida0630 iT邦新手 4 級 ‧ 2017-11-22 13:35:19 檢舉

呃 我也不太清楚問題,但是我不管是bind或著click 都是需要onbind才會不導致上一次執行過的結果再次執行。 所以我基本上現在每個button傳遞值得動作當動作完成時我都會unbind來解綁了

我要發表回答

立即登入回答