2014-12-02 64 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