关于jquery事件的问题:怎么判断点击了table外面的事件

关于jquery事件的问题:怎么判断点击了table外面的事件,第1张

不知道你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鼠标点击空白处触发事件代码`求解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9289317.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存