
不知道你HTML源码部分是什么结构,现只是附上js部分。
$(document)ready(function(){
var table;
var tableTitle;
$('table')click(function(){
$(this)removeClass('lock');
var tableId = $(this)attr('id');
if(pageJsonrepeattable[tableId] != undefined)
{
//定位
$('#tableTips')css({"left": $('#' + tableId + '_title')offset()left,"top":$('#' + tableId + '_title')offset()top -35})show();
table = $(this);
tableTitle = $('#' + tableId + '_title');
tableTitlefind('tr:first')show();
}
});
//移出表格的话添加标志class
$('table')blur(function(){
$(this)addClass('lock');
});
//整个页面的点击,如果不是点击table,则是点击table外。因为点击table时它先删去lock,导致此处失效了。
$(document)click(function(){
if($('table')hasClass('lock')) alert('click outside table!');
});
})
focusin()方法和focus()的事件源不同。
举个例子
<p><input type="text" /></p>
其中input元素可以触发focus()事件;p是input的父元素,当它包含的元素input触发了focus事件时
它就产生了focusin()事件。
理解为:focus()在元素本身产生,focusin()在元素包含的元素中产生。
<html>
<head>
<meta charset="utf-8">
<style>
div {
width:60px;
height:60px;
text-align:center;
border:1px solid #000;
}
#menu {
position:absolute;
left:0;
top:20%;
}
</style>
</head>
<body>
<div id="pop">我是提示</div>
<div id="menu">我是菜单</div>
<script src="jqueryjs"></script>
<script>
$(function(){
return $("#menu")hide(), $(document)click(function(){
return eventsrcElementid == "pop" $("#menu")show() : $("#menu")hide();
});
});
</script>
</body>
</html>
这里的难点是,点击元素和点击document事件会重叠,所以这里判断了事件来源,然后再进行相关动作
不知道你用的是不是jquery ui的 datepicker 如果去 参数中 有一个onSelect的参数,这个就是设置你选中日期是触发的事件。
onSelect: null, // Define a callback function when a date is selected
这个是源码中的片段。
H5edu教育Html5为您解答:
1事件代理的原理和意义
实现原理是利用了浏览器的事件冒泡和事件源(target)。
在js中事件会冒泡到父级节点,所以我们可以在父级节点进行事件代理。例如一个使用jQuery的函数:
$("#tab td")click(function(){
$(this)css("background","red");
}) ;
上面的函数给一个tab的td加了一个单击事件,但是如果表格1000行,就得绑定1000次,
$("#tab")bind("click",function(ev)){
var $obj=$(evtarget);
$objcss("background","red");
}
以上用bind函数将click绑定到了tab上,从而实现事件代理。
2jQuery中的绑定函数
(1)bind()为每个匹配元素的特定事件绑定事件处理函数
$("#niu")bind('click',function(){
alert("hello niuniu");
});
此代码把id为niu的元素响应事件click,并显示警报。使用bind绑定多个事件时,可以这样
$("#niu")bind('mouseenter mouseleava',function(){
$(this)css("background","yellow");
});
$("#foo")bind({
click:function(){
},
mouseenter:function(){
}
});
(2)delegate()指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数
$("table")delegate("td","click",function(){
$(this)toggleClass("chosen");
});
(3)on在选择元素上绑定一个或多个事件的事件处理函数
function greet(event) { alert("Hello"+eventdataname); }
$("button")on("click", { name: "Karl" }, greet);
$("button")on("click", { name: "Addy" }, greet);
(4)live给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的
$("a")live("click", function() { return false; })
以上是常用的绑定函数。
技术文档引用:
自从live()方法处理事件一旦传播到文档的顶部,live事件是不可能停止传播的。同样地,delegate() 事件将始终传播给其中包含的被委托元素;同时,任何在 DOM 树中,比这些元素低的元素上绑定的相同事件,在 delegate() 事件被调用的时候,也会被触发。因此,如果要在事件中阻止委托事件被触发,可以调用eventstopPropagation()或者返回false防止委派处理程序冒泡。
简单来说,bind()是直接绑定在元素上,而live()和delegate()则是通过冒泡的方式来绑定到元素上的。bind()方法只能给当前存在的元素绑定事件,对于事后采用JS方式新生成的元素无效,而live方法可以对后生成的元素也可以绑定相应的事件。
live()背后神奇的地方就在于它并不将事件绑定到你选定的elements上,而实际上是绑定到了DOM树的跟节点,而是在element中就像一个参数一样进行传递。
那么当你点击一个元素时,事件就会在DOM树上往上传递,直至到达根节点。这个事件的触发器已经在根节点被live()创建。这个触发方法将首先检测被点击的目标看是否和live()调用的选择器相匹配。如果匹配,那么绑定的方法就会执行了。
因为不管你在根节点内点击了什么,根节点的事件都会被触发,当你点击加入到根节点的任何元素时这个检查都会发生。
比如你要给一个还没有添加在页面中的id为“ABC”元素添加click事件。
实际上你要给document元素添加click事件。
并且在document的click回调函数中,判断事件源eventtarget。然后判断它的ID是“ABC”则执行相应的事件函数。类似这样。
1、在$("#one")click(function() 这样的写法中,如不在 $(function() 或$(document)ready(function()中,它被执行的时间是在body加载之前,所以这时,$('#one')取不到内容,所以无效。 2、可以不添加$(document)ready(),当然也就不能用$("#one")click(function() 这种写法了。 jQuery也可以是非侵入式的,可以用传统方式写事件: function oneclick() {} < id='one' onclick='oneclick();' />
什么是事件冒泡:在一个对象上触发某类事件(比如onclick事件),如果次对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。
事件冒泡的作用:事件冒泡允许多个 *** 作被集中处理(把事件处理器添加到一个父级元素上,避免把事件处理器添加到多个子级元素上),它还可以让你在对象层的不同级别捕获事件。
阻止事件冒泡:事件冒泡机制有时候是不需要的,需要阻止掉,通过 eventstopPropagation() 来阻止
$(function(){
})
代合并阻止 *** 作:实际开发中,一般把阻止冒泡和阻止默认行为合并起来写,合并写法可以用
// eventstopPropagation();
// eventpreventDefault();
// 合并写法:
return false;
事件委托就是利用冒泡的原理,把事件加到父级上,通过判断事件来源的子集,执行相应的 *** 作,事件委托首先可以极大减少事件绑定次数,提高性能;其次可以让新加入的子元素也可以拥有相同的 *** 作。
一般绑定事件的写法:bind
事件委托的写法:
如果我们要取消事件的委托:
//evdelegateTarge 委托的对象
$(evdelegateTarge)undelegatee();
//如果是上面的两种例子可使用//$listundelegate();
创建节点: ('<div>')
var ('<div>这是一个div元素</div>');
插入节点:
1、append()和appendTo():在现存元素的内部,从后面插入元素
2、prepend()和prependTo():在现存元素的内部,从前面插入元素
3、after()和insertAfter():在现存元素的外部,从后面插入元素
4、before()和insertBefore():在现存元素的外部,从前面插入元素
删除节点
$('#div1')remove();
以上就是关于关于jquery事件的问题:怎么判断点击了table外面的事件全部的内容,包括:关于jquery事件的问题:怎么判断点击了table外面的事件、jQuery 中 .focusin() 和.focus() 的区别、jquery鼠标点击空白处触发事件代码`求解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)