[問題] 請問關於jQuery事件的回傳值
各位好
情況是這樣的
有一個網頁上的按鈕被掛載了兩次click事件
一個是其他元件的自動行為(稱為A事件)
另一個則是我們自行定義的click事件(稱為B事件)
自行定義的事件因為寫在按鈕本身的onclick屬性上
所以發生順序會是[按鈕按下]->[B事件]->[A事件]
B事件做的事情很簡單,就只是跳個confirm視窗詢問要不要繼續
問題在於,因為A事件沒辦法光靠B事件的回傳值就取消其事件呼叫
雖然可以阻止form的submit行為
卻沒辦法光靠這樣就阻止在A事件裡面做的事
為了能夠阻止A事件其行為
我試著在B事件回傳前改變一個變數的值
在A事件觸發後馬上檢查這個值來判斷要不要繼續做
雖然這樣有效,但很想知道
有沒有辦法取得A事件的上一個事件的回傳值來做判斷?
換個方式問,就是事件的回傳值是否會保存在某處?
謝謝各位
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.120.147.13
推
09/26 11:26, , 1F
09/26 11:26, 1F
→
09/26 11:26, , 2F
09/26 11:26, 2F
老實說,我被下達的要求就是在不改動B的情況下,只靠改A的部分來達成一樣的事
所以我非得要取得前一個事件的回傳值不可...
不然我的作法爛歸爛,好歹也有達成要求
另外停止事件傳播的方法,好像只對其父元素有效果
我找了各種版本的停止事件傳播方法,一股腦的全丟進去
還是無法阻止A的執行
才會出下策在A裡面判斷變數決定要不要繼續
我javascript很弱,只能猜測是因為兩個click事件掛於同一元素下
層級相同所以無法互相干涉
→
09/26 12:41, , 3F
09/26 12:41, 3F
→
09/26 12:41, , 4F
09/26 12:41, 4F
後來在stackoverflow看到的做法
在A的按鈕事件綁定前,先抓出原本存在於A的函式物件
var oldEvent = button.click;
然後把button的click事件解除綁定後再重新掛上新函式
$(button).unbind('click');
button.click = function() {}
然後只要在函式開始時馬上執行
if (oldEvent() == false) {return false;}
後面接上A事件原本在做的事,就能達成我想要的效果了
看起來好像是把兩個事件合成為一個
由A來呼叫B,就可以取得B的回傳值
而從B那邊看來,就只是掛上的事件發揮了它原本的功能
而且這樣改完全不需要動到B那端的程式
雖然可能是因為我太菜才不知道可以這樣做
還是提供出來給大家參考看看
謝謝回應的各位
→
09/27 18:49, , 5F
09/27 18:49, 5F
→
09/27 18:49, , 6F
09/27 18:49, 6F
→
09/27 18:49, , 7F
09/27 18:49, 7F
嗯...原來如此
不過我得說,身為新到不能再新,功力又沒多好的菜鳥
我也沒辦法去改變早已談好的需求
如果被要求要只改某邊就達成功能,也只能先照做
我的知識也還不夠我去判斷這麼做或不這麼做的優劣之處在哪裡
我的職位也不夠我去談
只知道一個,目前的作法得要肯定其他事件的掛載事件早於它
現在能運作只是因為confirm的部分是寫在button的屬性中
如果是另外寫在其他地方的事件可能就會炸掉
推
09/27 21:12, , 8F
09/27 21:12, 8F
我自己也寫不出多好的作法所以這方面我比較...(汗)
※ 編輯: DragonTatto 來自: 114.25.203.178 (09/28 00:13)
→
09/28 13:59, , 9F
09/28 13:59, 9F