扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
类似 DOM 的行为:你在 DOM 节点(包括 document 对象)监听并触发自定义事件。这些事件既可以冒泡,也可以被拦截。这正是 Prototype、jQuery 和 MooTools 所做的。如果事件不能扩散,就必须在触发事件的对象上进行监听。
10年积累的网站设计制作、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有乌鲁木齐免费网站建设让你可以放心的选择与我们合作。
命名空间:一些框架需要你为事件指定命名空间,通常使用一个点号前缀来把你的事件和原生事件区分开。
自定义额外数据:JavaScript 框架允许你在触发自定义事件时,向事件处理器传送额外的数据。jQuery 可以向事件处理器传递任意数量的额外参数。
通用事件 API:只用 Dojo 保留了操作原生 DOM 事件的正常API。而操作自定义事件需要特殊的发布/订阅 API。这也意味着 Dojo 中的自定义事件不具有DOM事件的一些行为(比如冒泡)。
声明:我们往往需要在预定义的事件中加入一些特殊的变化(例如,需要Alt键按下才能触发的单击事件),MooTools 运行你定义此类自定义事件。此类事件需要预先声明,即便你只是声明他们的名字。任何未声明的自定义事件不会被触发。
理论太抽象,看看 jQuery 框架中如何使用事件。
jQuery 的事件自定义事件还是通过 on 绑定的,然后再通过 trigger 来触发这个事件。
//给element绑定hello事件
element.bind("hello",function(){
alert("hello world!");
});
//触发hello事件
element.trigger("hello");
这段代码这样写似乎感觉不出它的好处,看了下面的例子也许你会明白使用自定义事件的好处了,参考右边的代码。
trigger需要处理的问题
模拟事件对象,用户模拟处理停止事件冒泡(因为不是通过浏览器系统触发的,而是自动触发的,所以这个事件对象要如何处理?)
区分事件类型,触发标准的浏览器事件 和 自定义事件名绑定的处理程序。
拟冒泡机制
当事件是 click 类型,自然是本身支持冒泡这样的行为,通过 stopPropagation 阻止即可
当然一些事件,如 focusin 和 blur 本身不冒泡,但 jQuery 为了跨浏览器一致性, jQuery 需要在这些事件上模拟了冒泡行为,jQuery 要如何处理?
那么如果是自定义的aaa的事件名,又如何处理冒泡?
ul id="tabs"
li data-tab="users"Users/li
li data-tab="groups"Groups/li
/ul
div id="tabsContent"
div data-tab="users"part1/div
div data-tab="groups"part2/div
/div
script type="text/javascript"
$.fn.tabs = function(control) {
var element = $(this);
var control = $(control);
element.delegate("li", "click", function() {
var tabName = $(this).attr("data-tab");
//点击li的时候触发change.tabs自定义事件
element.trigger("change.tabs", tabName);
});
//给element绑定一个change.tabs自定义事件
element.bind("change.tabs", function(e, tabName) {
element.find("li").removeClass("active");
element.find("[data-tab='" + tabName + "']").addClass("active");
});
element.bind("change.tabs", function(e, tabName) {
control.find("[data-tab]").removeClass("active");
control.find("[data-tab='" + tabName + "']").addClass("active");
});
// 激活第一个选项卡
var firstName = element.find("li:first").attr("data-tab");
element.trigger("change.tabs", firstName);
return this;
};
$("ul#tabs").tabs("#tabsContent");
/script
这部分代码主要声明,页面加载后 “监听事件” 的方法。
例如:
$(document).ready(
$("a").click(function(){alert('你点我干嘛')});
);
这句的意思是:
页面加载成功后,页面内的所有链接在“点击”事件的时候,提示“你点我干嘛”
一、可以使用jQuery的trigger() 方法来响应事件。
二、定义和用法:
trigger() 方法触发被选元素的指定事件类型。
1、语法:
$(selector).trigger(event,[param1,param2,...]);
2、参数描述:
event 必需。规定指定元素要触发的事件。可以使自定义事件(使用 bind() 函数来附加),或者任何标准事件;[param1,param2,...] 可选。传递到事件处理程序的额外参数。额外的参数对自定义事件特别有用。
三、实例:
触发 select元素的change事件:$("button").click(function(){$("select").trigger("change");});
1种是把那个函数放到ready函数外面。 第2种是在ready函数里面加上window.deleteStu = deleteStu; 即: $(function(){ function deleteStu(id){ alert(id); } window.deleteStu = deleteStu; }
大多数情况下我们使用左键来进行页面交互,而右键大部分对于开发者来说是审查元素的,有的时候我们也要自定义鼠标右键点击行为来达到更好的交互性,常见的有漫画左键前进、右键后退。
第一步我们要屏蔽浏览器默认的右键点击行为,即阻止弹出框。
首先要将阻止弹出函数绑定到目标元素上:
//阻止浏览器默认右键点击事件
$("div").bind("contextmenu",
function(){
return
false;
})
如此一来,div元素的右击事件就被屏蔽了,而浏览器其他区域不受影响,如果你想在整个页面屏蔽右击事件,只需这样做:
document.oncontextmenu
=
function()
{
return
false;
}
接下来就可以为元素绑定右击响应函数了:
$("div").mousedown(function(e)
{
console.log(e.which);
//右键为3
if
(3
==
e.which)
{
$(this).css({
"font-size":
"-=2px"
});
}
else
if
(1
==
e.which)
{
//左键为1
$(this).css({
"font-size":
"+=3px"
});
}
})
示例效果为右击字体缩小,左击字体变大,且其它区域可以响应默认右击事件。
完整代码:
head
style
type="text/css"
div{
font-size:20px;
}
/style
script
src="../jquery.js"/script
script
$(function()
{
//阻止浏览器默认右键点击事件
/*document.oncontextmenu
=
function()
{
return
false;
}*/
//某元素组织右键点击事件
$("div").bind("contextmenu",
function(){
return
false;
})
$("div").mousedown(function(e)
{
console.log(e.which);
//右键为3
if
(3
==
e.which)
{
$(this).css({
"font-size":
"-=2px"
});
}
else
if
(1
==
e.which)
{
//左键为1
$(this).css({
"font-size":
"+=3px"
});
}
})
})
/script
/head
body
div
div
/div
/body
以上这篇jQuery自定义元素右键点击事件(实现案例)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
可以:
添加一个button的onclick事件 onclick="lookupAjax();"
编写lookupAjax();
function lookupAjax(){
var oSuggest = $("#id")[0].autocompleter;
oSuggest.findValue();
return false;
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流