click事件執(zhí)行兩次桶癣??

問(wèn)題描述

在項(xiàng)目中遇到一個(gè)bug——label標(biāo)簽上綁定了一個(gè)返回一層的點(diǎn)擊事件娘锁,然鵝每次點(diǎn)擊都會(huì)返回兩層牙寞!!

經(jīng)調(diào)試發(fā)現(xiàn),label標(biāo)簽中包裹input莫秆,而事件綁定在label標(biāo)簽中時(shí)间雀,點(diǎn)擊label區(qū)域,事件會(huì)執(zhí)行兩次镊屎。

問(wèn)題測(cè)試

<label onclick="labelConsole()">
  <input type="checkbox" onclick="inputConsole()">勾選協(xié)議
</label>
function labelConsole (){
  console.log('label_click 這是我們想要的操作')
}
function inputConsole (){
  console.log('input_click')
}
  1. 點(diǎn)擊label區(qū)域(不直接點(diǎn)擊input區(qū)域):label上的事件被觸發(fā)執(zhí)行一次惹挟,同時(shí)子元素input本身也綁定有click事件,觸發(fā)后又冒泡傳遞給label缝驳,又觸發(fā)了一次label綁定事件连锯。


  2. 直接點(diǎn)擊input區(qū)域:觸發(fā)input綁定事件后又冒泡傳遞給label,觸發(fā)了label的綁定事件用狱。


分析原因

  1. 元素默認(rèn)綁定click事件
    一些元素如<a>运怖、<button>、<input>本生就默認(rèn)綁定了click事件齿拂,即使你不綁定驳规,click事件發(fā)生時(shí)他們也會(huì)接收到。
  2. label標(biāo)簽的擴(kuò)展性
    它把所包含的input的用戶(hù)交互區(qū)域擴(kuò)展了署海,注意的是label和所包含的input都開(kāi)始綁定默認(rèn)事件吗购,此時(shí)會(huì)發(fā)生事件冒泡現(xiàn)象医男。在label上的click事件的處理函數(shù)會(huì)觸發(fā)2次就是由于:第一次是label自己接收到事件,執(zhí)行處理函數(shù)捻勉,第二次是input接受到事件后冒泡傳遞給label镀梭,再次觸發(fā)處理函數(shù)。

解決方案

方案1:將原綁定于label的事件踱启,直接綁定于input上报账。

<label>
  <input type="checkbox" onclick="labelConsole()">勾選協(xié)議
</label>

此時(shí),當(dāng)點(diǎn)擊label區(qū)域或者直接點(diǎn)擊input區(qū)域埠偿,由于checkbox本身有默認(rèn)click監(jiān)聽(tīng)器透罢,所以會(huì)觸發(fā)一次我們綁定的事件。

方案2:阻止事件冒泡

<label onclick="labelConsole()">
  <input type="checkbox" onclick="inputConsole()">勾選協(xié)議
</label>
function labelConsole (){
  console.log('label_click 這是我們想要的操作')
}
function inputConsole (){
  console.log('input_click');
  window.event? window.event.cancelBubble = true : e.stopPropagation();
}

點(diǎn)擊label非input區(qū)域的時(shí)候效果如上冠蒋,這種方法看似實(shí)現(xiàn)了我們的需求羽圃,只讓我們想要的操作觸發(fā)一次,但是如果你直接點(diǎn)擊的是input抖剿,那就跪了朽寞。沒(méi)錯(cuò),當(dāng)你直接點(diǎn)擊input的時(shí)候只會(huì)觸發(fā)input的綁定事件斩郎,而我們綁定在label上的事件則無(wú)人問(wèn)津脑融。這并不符合預(yù)期,所以方案2不太可取缩宜。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肘迎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子脓恕,更是在濱河造成了極大的恐慌膜宋,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炼幔,死亡現(xiàn)場(chǎng)離奇詭異秋茫,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)乃秀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)肛著,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人跺讯,你說(shuō)我怎么就攤上這事枢贿。” “怎么了刀脏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵局荚,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)耀态,這世上最難降的妖魔是什么轮傍? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮首装,結(jié)果婚禮上创夜,老公的妹妹穿的比我還像新娘。我一直安慰自己仙逻,他們只是感情好驰吓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著系奉,像睡著了一般檬贰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上喜最,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天偎蘸,我揣著相機(jī)與錄音庄蹋,去河邊找鬼瞬内。 笑死,一個(gè)胖子當(dāng)著我的面吹牛限书,可吹牛的內(nèi)容都是我干的虫蝶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼倦西,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼能真!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起扰柠,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤粉铐,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后卤档,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蝙泼,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年劝枣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了汤踏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舔腾,死狀恐怖溪胶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情稳诚,我是刑警寧澤哗脖,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響才避,放射性物質(zhì)發(fā)生泄漏丘损。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一工扎、第九天 我趴在偏房一處隱蔽的房頂上張望徘钥。 院中可真熱鬧,春花似錦肢娘、人聲如沸呈础。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)而钞。三九已至,卻和暖如春拘荡,著一層夾襖步出監(jiān)牢的瞬間臼节,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工珊皿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留网缝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓蟋定,卻偏偏與公主長(zhǎng)得像粉臊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子驶兜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理扼仲,服務(wù)發(fā)現(xiàn),斷路器抄淑,智...
    卡卡羅2017閱讀 134,662評(píng)論 18 139
  • ??JavaScript 與 HTML 之間的交互是通過(guò)事件實(shí)現(xiàn)的肆资。 ??事件矗愧,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,495評(píng)論 1 11
  • 總結(jié): 鼠標(biāo)事件 1.click與dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r閱讀 1,607評(píng)論 2 10
  • 第1章 鼠標(biāo)事件 1-1 jQuery鼠標(biāo)事件之click與dbclick事件 用交互操作中,最簡(jiǎn)單直接的操作就是...
    mo默22閱讀 1,281評(píng)論 0 6
  • 1.幾種基本數(shù)據(jù)類(lèi)型?復(fù)雜數(shù)據(jù)類(lèi)型?值類(lèi)型和引用數(shù)據(jù)類(lèi)型?堆棧數(shù)據(jù)結(jié)構(gòu)? 基本數(shù)據(jù)類(lèi)型:Undefined迅耘、Nul...
    極樂(lè)君閱讀 5,520評(píng)論 0 106