2014-12-02 58 views
2

我有一個html表格,當用戶點擊一個表格行時,該行的複選框被選中,並且會發生一些其他功能。當用戶點擊選擇或輸入時,我想停止傳播,因此複選框不會更改。我已經證明我在這的jsfiddle尋找功能:停止在輸入傳播點擊

http://jsfiddle.net/ehf7pc3f/6/

在我開發的網站,當用戶點擊一個選擇,該複選框被改變(如預期),但如果用戶點擊輸入,該複選框不會更改。我有這樣的代碼來更改停止複選框:

$("select").click(function (e) { 
    e.stopPropagation(); 
}); 

$("input").click(function (e) { 
    e.stopPropagation(); 
}); 

沒有人有一個想法,爲什麼選擇點擊的作品,但輸入點擊不?

更新*

的jsfiddle:http://jsfiddle.net/ehf7pc3f/8/

我添加了一個新的jsfiddle將觸發點擊輸入時,警報和警報單擊某一行的時候。在小提琴中,如果我點擊輸入,只有輸入警報觸發。如果我在我的開發站點上進行相同的測試,則只會觸發行警報。

這裏是我的網站發展的實際代碼:

<table class="full-width row-table" style="table-layout:fixed;"> 
    <tr style="background:none;" class="no-hover row"> 
     <td class="no-padding" style="width:16px;"><input class="check-box" style="margin:2px 0px;" type="checkbox" /></td> 
     <td class="no-padding" style="width:6px;"><span class="arrow2" style="margin:6px 0px 0px 0px;"></span></td> 
     <td style="width:94px;"> 
      <span class="contact-label">Owner <br /> </span> 
      <select class="contact-drop-down hidden"> 
       <option value="Owner">Owner</option> 
       <option value="Applicant">Applicant</option> 
       <option value="Contractor">Contractor</option> 
      </select> 
     </td> 
     <td style="width:95px;"> 
      <p class="title-label">Owner</p> 
     </td> 
     <td style="width:119px;"> 
      <p class="name-label">Michael Douglas</p> 
     </td> 
    </tr> 
</table> 
+3

正確對我的作品在FF,你使用的瀏覽器? – Deleteman 2014-12-02 19:02:09

+1

並且在Chrome中正常工作... – epascarello 2014-12-02 19:03:04

+0

stopPropogation旨在阻止正常功能(即錨點將導航到href地址)。這不會阻止通過某種形式的jquery事件處理添加的其他代碼。 – rfornal 2014-12-02 19:04:37

回答

3

使用event.preventDefault()

event.stopPropagation()阻止事件冒泡DOM中的父元素(或者如果您在捕獲階段中偵聽,則停止)。而event.preventDefault()停止瀏覽器的默認行爲。

延伸閱讀: https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation

+0

正如我在評論中所述,我也嘗試了preventDefault()以及它不起作用。我還沒有得到答案,爲什麼相同的代碼在 ... @jamesism – EricBellDesigns 2014-12-02 20:35:32

+0

我分叉你的小提琴http://jsfiddle.net/ks5pr24n/,它適用於我當你點擊輸入(複選框)它不檢查複選框。但是,如果您單擊該行,手動設置checked屬性的代碼仍將被調用。同樣,如果你的輸入處理程序只調用preventDefault而不是stopPropogation,那麼這個事件會冒泡到你的'.row'單擊處理程序,並調用手動設置checked屬性的相同代碼。 – jamesism 2014-12-02 20:40:57

+0

如果你會閱讀我的整個解釋,你會發現我的問題不會出現在小提琴中,但只在我的開發網站上。 – EricBellDesigns 2014-12-02 20:43:58