问题1:jQuery的美元符号$有什么作用?
回答:其实美元符号$只是”jQuery”的别名,它是jQuery的选择器,如下代码:
$(document).ready(function(){
});
当然你也可以用jQuery来代替$,如下代码:
jQuery(document).ready(function(){
});
问题2:body中的onload()函数和jQuery中的document.ready()有什么区别?
回答:onload()和document.ready()的区别有以下两点:1、我们可以在页面中使用多个document.ready(),但只能使用一次onload()。2、document.ready()函数在页面DOM元素加载完以后就会被调用,而onload()函数则要在所有的关联资源(包括图像、音频)加载完毕后才会调用。
这个问题很重要,并且常常被问到。 ready() 函数用于在文档进入ready状态时执行代码。当DOM 完全加载(例如HTML被完全解析DOM树构建完成时),jQuery允许你执行代码。使用$(document).ready()的最大好处在于它适用于所有浏览器,jQuery帮你解决了跨浏览器的难题。需要进一步了解的用户可以点击 answer链接查看详细讨论。
问题3:jQuery中的Delegate()函数有什么作用?
delegate是另一种绑定事件的方式。它将事件处理函数绑定在指定的根元素上, 由于事件会冒泡1,它用来处理指定的子元素上的事件。
.delegate():Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.
它的使用方式比bind稍显复杂,但它的功能非常强大:
自动绑定动态添加的元素。因为事件处理函数绑定在#root上,新加的子元素事件也会冒泡到#root。
性能好于.bind()。只绑定一个事件处理函数,绑定速度相当快。
问题4. 如何找到所有 HTML select 标签的选中项?
这是面试里比较棘手的 jQuery 问题之一。这是个基础的问题,但是别期望每个 jQuery 初学者都知道它。你能用下面的 jQuery 选择器获取所有具备 multiple=true 的 <select > 标签的选中项:
$("name='nameOfSelected' :selected")
问题5. $(this) 和 this 关键字在 jQuery 中有何不同?
这对于很多 jQuery 初学者来说是一个棘手的问题,其实是个简单的问题。$(this) 返回一个 jQuery 对象,你可以对它调用多个 jQuery 方法,比如用 text() 获取文本,用val() 获取值等等。而 this 代表当前元素,它是 JavaScript 关键词中的一个,表示上下文中的当前 DOM 元素。你不能对它调用 jQuery 方法,直到它被 $() 函数包裹,例如 $(this)。
问题6.你要是在一个 jQuery 事件处理程序里返回了 false 会怎样?
这通常用于阻止事件向上冒泡。
问题7.trigger()和triggerHandler()的区别.
trigger():在每一个匹配的元素上触发某类事件。
triggerHandler():这个特别的方法将会触发指定的事件类型上所有绑定的处理函数。
看似两个非常相似,但是表同里不同!
下面就是他们之间的三大区别:
- 第一:trigger会导致浏览器同名的默认行为的执行,如:trigger('submit');不但会执行submit()函数的效果,也会执行表单提交的效果;
而triggerHandler就不会导致默认行为的执行
- 第二:triggerHandler只会触发JQ对象集合中第一个元素的事件处理函数,也不会产生事件冒泡。而trigger不同
- 第三:这个方法的返回时事件处理函数的返回值,而不是具有可链性的JQ对象,此外,如果最开始的JQ对象集合为空,则返回undefined.
特别是第二条,关于这个bug的 ticket。关于这个问题的 commit。jQuery自己实现了一个event对象用于解决浏览器间的差异问题。可是由于有mouseenter/mouseleave等非标准事件的存在,jQuery引入了special事件的子系统,让原生事件回到模拟事件的事件列队中,可是这个系统并不能解决所有问题,当使用trigger.focus时,IE下会错误地执行两次回调。
triggerHandler是对trigger产生这种问题的解决方法。但是使用triggerHandler时你会发现input是没有光标focus效果的。因为它不触发浏览器默认事件
2
解决方法
除了用triggerHandler另一个方法是在focus绑定事件中加上event.preventDefault()
。
可是你发现这不符合我们的期望呀,因为focus事件回调执行了,但是连个focus效果都没有。
最终解决方法
既然是jQuery封装的关系,那我们用原生的事件就可以了。看演示,左边是用原生事件触发的,右边用triggerHandler。
$('input')[0].focus();
jquery trigger
JS阻止事件冒泡以及浏览器默认行为
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。