有了这个HTML
<div>
<button>
<img src="https://img.skitch.com/20110912-1m2qj31m7sxmh46uheef63gutu.gif">
</button>
</div>
Run Code Online (Sandbox Code Playgroud)
和这个jQuery
$(document).ready(function() {
$("body").live("click", function(event) {
$("body").append(event.target.tagName);
});
});
Run Code Online (Sandbox Code Playgroud)
为什么Chrome中的事件目标节点是图像,而在Firefox中它是按钮?
jsfiddle测试 - > http://jsfiddle.net/MikeGrace/YC5A7/
我想你们中的一些人必须皱起眉头读这个标题呃?我相信人们每次都会问这个问题,但是,我还没有看到我的特殊问题,我正在努力!将事件绑定到动态创建的元素是我的kryptonite,我只是无法绕过它...
好吧,我正在使用带有typehead()插件的Twitter Boostrap.我正在使用这个技巧使其与远程数据源一起工作.此时,一切正常.我单击表单中的文本输入,为其标记,脚本将加载外部源并显示下拉列表.但我有动态元素创建,你已经想到,它只是不会对它们起作用.我正在探索live()方法,但看看脚本被解雇的"方式",我只是不确定如何实现它.
$('#anInputField').typeahead().on('keyup', function(ev){
// stuff happens
});
Run Code Online (Sandbox Code Playgroud)
每次有密钥时,脚本都会触发一个jSON请求,检查他的东西,并将结果返回给执行作业自动完成部分的typehead().那么我怎么能说jQuery来看看初始绑定后创建的#aDropdownID呢?我继续检查我是否可以使用live(),但是因为on()替换它...我很无能为力!
任何帮助赞赏!
这个问题很久以前就已在这里提出过:
但它从来没有得到最终的回答(或者我可能根本无法正确搜索).
是否可以检测scroll用户或jQuery animate函数是否触发了事件?
我正在尝试阻止scroll事件触发自己,同时做这样的事情:
$(document).scroll(function(){
$("html").stop(true);
var number = 400; //some other stuff is happening here
clearTimeout(tout);
tout = setTimeout(function(){
if(top == $(document).scrollTop()){
$("html").animate({
scrollTop: (number),
easing: "easeInQuad",
duration: 110
});
}
},120);
});
Run Code Online (Sandbox Code Playgroud)
这段代码似乎很合适:
$('#scroller').scroll(function(e) {
if (e.originalEvent) {
console.log('scroll happen manual scroll');
} else {
console.log('scroll happen by call');
}
});
Run Code Online (Sandbox Code Playgroud)
但是该originalEvent对象无法正确检测动画触发器.
有没有其他方法可以做到这一点?
是否有任何标准规则在jQuery插件中实现预定义事件?
例如,Zebra Accordion插件(jQuery的一个小型手风琴插件)或任何其他插件的特殊情况定义了一些事件,如下所示:
Zebra手风琴活动:
onClose:折叠选项卡后触发的事件.
onOpen:折叠选项卡后触发的事件.
在这种情况下,如果我想在框标题之后添加一个具有特殊Font Awesome字符的div (例如fa-chevron-down)collapsed(Closed,折叠状态)并删除该字符并将其替换为新字符(如fa- (chevron-up)靠近方框标题时expended(打开状态).我想最后添加一些像jQuery Accordion这样的功能.我尝试使用下面的代码,但似乎出现了问题:
$('.Zebra_Accordion').on('onOpen', function(e) {
$(this).append( "<span class='fa fa-chevron-down'></span>" );
});
$('.Zebra_Accordion').off('onClose', function(e) {
$(this).append( "<span class='fa fa-chevron-up'></span>" );
});
Run Code Online (Sandbox Code Playgroud) 我在下拉列表中注册了一个jQuery插件,如下所示:
$('#country').linkToStates('#province');
Run Code Online (Sandbox Code Playgroud)
我手动选择下拉这样的:
$('#country').val('United States');
Run Code Online (Sandbox Code Playgroud)
但是onchange事件并没有触发在它之前注册的.linkToStates().所以看起来val()只改变了下拉位置,但实际上并没有改变onchange事件.有人可以帮忙吗?
顺便说一下,这是注册的代码,如果它有帮助:
$.fn.extend({
linkToStates: function(state_select_id) {
$(this).change(function() {
var country = $(this).attr('value');
$(state_select_id).removeOption(/.*/);
switch (country) {
case 'Canada':
$(state_select_id).addOption(canadian_provinces, false);
break;
case 'United States':
$(state_select_id).addOption(us_states, false);
break;
default:
$(state_select_id).addOption({ '' : 'Please select a Country'}, false);
break;
}
});
}
});
Run Code Online (Sandbox Code Playgroud) 任何人都可以告诉我为什么这段代码不起作用?
$('body').on('test', function() {
alert('test');
});
$('body').trigger('test');
Run Code Online (Sandbox Code Playgroud)
我正在使用jquery-1.7.2.min.我没有得到任何错误,只是没有任何反应.
我已经尝试将代码放在内联脚本中,$(document).ready()但仍然没有.我也试过都on()和bind()和没有结果.我看到所有示例都显示相同的语法,所以有什么不同呢?
阅读关于jQuery性能的另一个SO问题,我开始考虑使用事件委托而不是单独绑定元素的重要性.我主要考虑的是jQuery,但我认为它可能适用于Javascript.
事件授权有两个主要目的:
我的问题是关于其中的第二个问题.一般的答案可能是"它取决于确切的情况",但我想知道是否有经验法则或基准测试方法来测试这一点.
所以,问题是:在事件委托的性能优势超过性能成本之前,您需要多少元素?
javascript performance jquery event-delegation jquery-events
我正在尝试使用用户可以替换或优化的默认搜索值初始化数据表.这是服务器端数据.我没有在Datatables文档中阅读过您可以执行此操作的任何内容.
$('#example_filter label input[type=text]').val('Default Product')
Run Code Online (Sandbox Code Playgroud)
上面设置了值,但因为没有涉及按键,事件处理程序不会提取它.有没有一种方法可以链接到上面,就像输入键一样,或者我应该编写一个事件处理程序来查找字段中的更改.我是数据表和jquery新手的新手.谢谢.
我正在捕捉粘贴事件 $('selector').on('input', function(event) { ... });
然后我试图测试粘贴的内容,如果没有通过验证,请取消粘贴event.preventDefault().不幸的是,到执行监听器功能时,文本已被粘贴并且event.preventDefault()什么都不做.
那么什么是捕获粘贴事件的好方法,如果粘贴的内容未验证,请撤消/阻止粘贴?
我知道我可以使用.on('paste', function(event) { ... }),但这不会给我粘贴的文本或粘贴后的输入元素的内容,除非我使用setTimeout()一些分钟的等待时间,我想避免使用setTimeout().
我在jquery的ready函数中将一个自定义事件处理程序附加到body.紧接着,我成功触发了自定义事件.
$(function(){
$("body").on("test", function(){ alert("test triggered"); }
$("body").trigger("test");
}
Run Code Online (Sandbox Code Playgroud)
但是,当我在控制台中触发它时没有任何反应.为什么?
jquery ×10
jquery-events ×10
javascript ×6
bind ×1
datatables ×1
dom ×1
events ×1
html ×1
keyup ×1
paste ×1
performance ×1
scroll ×1
triggers ×1