- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
(I had to rewrite the whole question in order to clarify it, some older answers may not match the content entirely)
我在这里创建了两个 fiddle 来演示这个问题。
当您点击表格行时,将显示一个警报。
但是,单击“更多”按钮时不应显示此警报。
工作示例已正确说明 here
然而,当我使用此功能创建插件时,stopPropagation() 不再起作用,当我单击“更多”按钮时仍然会显示警报,如图所示 here
插件:
$.fn.shorten = function(settings) {
var config = $.extend( {
showChars : 100,
ellipsesText : "...",
moreText : "more",
lessText : "less"
}, settings);
$(document).off('click', '.morelink').on('click', '.morelink', function(e){
e.preventDefault();
e.stopPropagation();
var $this = $(this);
// Toggle del nombre del link
if ($this.hasClass('less')) { // clic en more para mostrar less
$this.removeClass('less');
$this.html(config.moreText);
// muestro shorcontent y escondo allcontent
$this.parent().prev().prev().show(); // shortcontent
$this.parent().prev().hide(); // allcontent
} else { // click en less para mostrar more
$this.addClass('less');
$this.html(config.lessText);
$this.parent().prev().prev().hide(); // shortcontent
$this.parent().prev().show(); // allcontent
}
return false;
});
return this.each(function() {
var $this = $(this);
var content = $this.html();
if (content.length > config.showChars) {
var c = content.substr(0, config.showChars);
if (c.indexOf('<') >= 0) // If there's HTML don't want to cut it
{
var inTag = false; // I'm in a tag?
var bag = ''; // Put the characters to be shown here
var countChars = 0; // Current bag size
var openTags = []; // Stack for opened tags, so I can close them later
for (i=0; i<content.length; i++)
{
if (content[i] == '<' && !inTag)
{
inTag = true;
// This could be "tag" or "/tag"
tagName = content.substring(i+1, content.indexOf('>', i));
// If its a closing tag
if (tagName[0] == '/')
{
if (tagName != '/'+openTags[0]) console.log('ERROR en HTML: el tope del stack debe ser la tag que cierra');
else
openTags.shift(); // Pops the last tag from the open tag stack (the tag is closed in the retult HTML!)
}
else
{
// There are some nasty tags that don't have a close tag like <br/>
if (tagName.toLowerCase() != 'br')
openTags.unshift( tagName );// Agrega al inicio el nombre de la tag que abre
}
}
if (inTag && content[i] == '>')
{
inTag = false;
}
if (inTag) bag += content[i]; // Add tag name chars to the result
else
{
if (countChars < config.showChars)
{
bag += content[i];
countChars ++;
}
else // Ya tengo los caracteres necesarios
{
if (openTags.length > 0) // Tengo tags sin cerrar
{
console.log('Quedaron tags abiertas');
console.log(openTags);
for (j=0; j<openTags.length; j++)
{
console.log('Cierro tag '+ openTags[j]);
bag += '</'+ openTags[j] +'>'; // Cierro todas las tags que quedaron abiertas
// You could shift the tag from the stack to check if you end with an empty stack, that means you have closed all open tags
}
break;
}
}
}
}
c = bag;
}
var html = '<span class="shortcontent">' + c + ' ' + config.ellipsesText +
'</span><span class="allcontent">' + content +
'</span> <span><a href="javascript:void(0)" class="morelink badge">' + config.moreText + '</a></span>';
$this.html(html);
$(".allcontent").hide(); // Esconde el contenido completo para todos los textos
}
});
};
最佳答案
您不仅可以使用return false;
,还可以使用JavaScript:void(0)
。
Check here for the difference between the two.
尽管 stopPropogation()
和 preventDefault()
不同,return false
执行两者。
最后 .live()
被折旧,我们 on()
代替:http://api.jquery.com/on/
你可以试试:
$('body').on('click', '.morelink', function(e) {
e.preventDefault();
...
}
这是一个棘手的临时更改,可以让它按您想要的方式工作,直到您找到更永久的解决方案。嘿,它甚至可能是一个 jQuery 错误,我不知道。无论哪种方式,这都允许点击 td 来执行警报,而点击下拉菜单(更多/更少)则不会。
$(document).ready(function() {
$('#tab_open_deals tbody tr td').off('click').on('click', function(e) {
var $target = $(e.target);
if($target.is(".morelink"))
{
// You clicked the morelink. Do nothing.
}
else
{
// Do your stuff!
}
});
关于javascript - 如何在 jquery 插件中停止传播()? (更新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14378891/
如果有人能解释这个注释的作用以及我们何时使用它: @Transactional(propagation=Propagation.REQUIRED) 谢谢 最佳答案 如果您需要在 Spring Docs
我有一个页面,它有一个 keydown 事件监听器,用于监听 Escape 键,以便返回。我还有一个简单的模态类,它也监听 Escape 键以关闭它。主页监听器检查模式是否打开,如果打开,则不执行任何
我想在模型中设置默认变量名称 T (=xx) - 将该模型拖到新模型中并在其中定义变量 xx。我收到错误消息:使用未声明的变量 xx。 这是子模型 model test parameter Rea
在 android 2.x 浏览器中查看此示例..它是在我的应用程序中复制场景的示例.. http://johnchacko.net/samples/tap.html 它是关于监听“tap”并从监听器
如您所见,我正在尝试将 GatewayConnectionFailedException 传播到我的 UI。我希望此代码捕获除异常之外的所有内容,我希望表示层捕获该异常以通知用户数据库是问题所在,以便
我目前正在尝试让可执行文件与它需要的所有依赖项正确链接。 这是依赖项的示例结构: exe -> libA -> libB exe和 libA有自己的存储库。 exe拉入libA像这样的东西: add_
有什么方法可以调用带有单个参数的 Scala 函数,给定一个数组 (类似于 JavaScript Spreads在 ECMAScript 6) 中? ys = [10.0, 2.72, -3.14]
我有一个小型静态库,它需要 boost 头文件,并且需要包含目录中的“include”目录。 ... add_library(alib STATIC ...) target_include_direc
我有一些 promise 可以返回对象。 现在我想将它们合并/扩展为一个新对象,因此我使用 Lodash's extend . var whenEverythingIsDone = Promise.a
这是我认为人们通常希望在 Scala 中做的事情,但如果我能在任何地方找到一个例子,我就该死了。 这段代码由于类型删除而无法编译,但它演示了我正在努力完成的事情: def parse[T](json:
这是我认为人们通常希望在 Scala 中做的事情,但如果我能在任何地方找到一个例子,我就该死了。 这段代码由于类型删除而无法编译,但它演示了我正在努力完成的事情: def parse[T](json:
我们有大量 MOSS 2007 站点需要添加大量的 javascript。我编辑、 checkin 、发布并批准了对 default.master 的更改,更改反射(reflect)在根网站上,但没有
请看一下下面的 fiddle :http://jsfiddle.net/K9NjY/ 我在这段代码上花了 3-4 个小时,并将其缩小到最短的版本,但现在我陷入了困境。 问题:1. 点击“divOne”
我读到如果在流程中抛出异常,框架要做的第一件事就是检查消息头中的错误 channel 属性。总是这样吗? 在我的特殊情况下,我将自定义错误 channel 分配给消息 header ,但该消息似乎已向
创建一个小的 C++ 大型精度类,一切似乎都运行良好,但是添加,如果我将 0xffffffff 和 0x04 加在一起,我会得到 0xffff0003,而我应该得到 0x0100000003。这是有问
我正在尝试重新创建 Dan Abramov 类(class)中的 Redux 示例。传播{...store.getState()}在应用程序级别不起作用,Redux 正在更改状态并且 React 不会
考虑一个需要很长时间的事务。在此期间,我想对 TableSmall 执行一些小更新。 ,它应该立即执行,并且主事务的回滚不应该回滚那些小的更新。 我当前的问题是这些小更新将锁定 TableSmall\
我需要对现有函数进行修改,具有一些 const 输入参数: int f(const owntype *r1, const owntype *r2) 为了做到这一点,我想调用一个使用相同类型但没有 co
我有一个带有 ViewModel 的 WPF UserControl: 这个 UserControl 有一个 De
我试图在收到这样的短信时不传播 public class SMSReceiver extends BroadcastReceiver { @Override public void onRec
我是一名优秀的程序员,十分优秀!