createevent的用法,create 语句
原声js怎么触发click事件
如果你只需要触发那些常见的事件,比如说鼠标点击,并且不考虑跨浏览器兼容的问题的话,只需要这样做:
document.getElementById('myLink').click()
当然这么做的兼容性并不好,比如说 FireFox 就不干。另外 onclick() 这样的方法只能用于在 HTML 中的内联写法。
如果事情稍微复杂一些,比如说你要触发一些自定义的事件,那么你必须要理解 DOM 里面的“事件对象模型”,本质上 $.trigger() 就是对这些概念的封装。不过问题是 DOM 的一致性和兼容性一直都不太好,所以关于事件的对象模型长期以来都处于一个比较混乱的状况下,如果不用 jQuery 的话,想找到一个既简单又足够健壮的解决方案并不容易。
很长时间以来,人们都是这样做的:
// 创建一个事件对象,就好像你绑定事件回调函数里获得的那个事件对象一样
var myEvent = document.createEvent('Event')
// 初始化这个事件对象,为它提高需要的“特性”
myEvent.initEvent('myEventName', true, true)
// 按照常见的方式绑定对该事件的监听,这里的 element 可以是任何一个元素,你懂的
element.addEventListener('myEventName', function(evt) {
// 这里,evt 就是你创建的事件对象了,不过它会更丰富一些——这些是浏览器为你做的
})
// 然后这样触发它
element.dispatchEvent(myEvent)
你必须要去阅读 createEvent initEvent dispatchEvent 这些方法的文档来完整认识它们(文档可以去 MDN 找),上面介绍的只是基本用法。$.trigger() 所封装的也就是它们(及其相关的兼容性处理等等)。不过这些方法已经有点“过时”了,特别像 initEvent 这样的方法更是已经被(新的 DOM 标准)废弃了。
以下是更“现代”的做法,不过老样子:兼容性会是问题:
var myEvent = new Event('myEventName')
element.dispatchEvent(myEvent)
绑定回调是一样的我就不重复了。另外“现代”的做法里触发内建事件要用对应的接口,比如说:
var event = new MouseEvent('click', {
'view': window,
'bubbles': true,
'cancelable': true
});
有没有一种方法来模拟在Windows触摸事件8
!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" ""
html xmlns=""
head
meta http-equiv="Content-Type" content="text/html; charset=utf-8" /
title触摸屏自动触发事件/title
style.div{
height:100px; width:100px; background:#0FF; border: double 2px #996666;
}
/style
/head
body
div class='div' id='bot'移动端模拟触发事件/div
button onclick="zidongchufashijian (bot)"移动端模拟触发事件/button
script
var bot = document.getElementById('bot');
bot.addEventListener('touchstart', function () { bot.innerHTML="手指点击"},false); //添加触摸事件
//-------------------自动触发事件开始-------------------------
function zidongchufashijian (el) {
var Event = document.createEvent('Event');//定义和用法createEvent() 方法创建新的 Event 对象。
Event.initEvent('touchstart', true, true); //initEvent()初始化新事件对象的属性
el.dispatchEvent(Event); //dispatchEvent() 方法给节点发送一个事件。
}
//-----------------自动触发事件结束--------------------------
bot.addEventListener("touchend",function () { bot.innerHTML="手指离开";},false);
bot.addEventListener("touchmove",function () { bot.innerHTML="手指滑动";
},false);
/script
/body
/html
vc++中,关于WaitForSingleObject和CreateEvent的用法
ExitHandle是一个标志事件,你可以把它理解为一个BOOL类型的变量
WaitForSingleObject是在指定的时间内等待这个事件发生,如果发生,返回值就是WAIT_OBJECT_0,你可以理解为在指定的时间内判断ExitHandle是否为真.
虽然效果上和BOOL变量类似,但实际上工作原理复杂的多,这涉及到WINDOWS的线程切换及线程同步等相关知识,有兴趣你可以仔细看下相关资料.
求C++高手
CreateEventA CreateEventW是一样的 只是一个对应Ansi字符一个对应Wide字符 不知用那个好就CreateEvent好了(编译器会自动选择A W)
另外这个和C++没关系 是WIN的API
事件对象就像一个开关:它只有两种状态---开和关。当一个事件处于”开”状态,我们称其为”有信号”否则称为”无信号”。可以在一个线程的执行函数中创建一个事件对象,然后观察它的状态,如果是”无信号”就让该线程睡眠,这样该线程占用的CPU时间就比较少。
产生事件对象的函数如下:
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes, // SD
BOOL bManualReset, // reset type
BOOL bInitialState, // initial state
LPCTSTR lpName // object name
);
该函数创建一个Event同步对象,如果CreateEvent调用成功的话,会返回新生成的对象的句柄,否则返回NULL。
参数说明:
lpEventAttributes 一般为NULL
bManualReset 创建的Event是自动复位还是人工复位.如果true,人工复位, 一旦该Event被设置为有信号,则它一直会等到ResetEvent()API被调用时才会恢复 为无信号. 如果为false,Event被设置为有信号,则当有一个wait到它的Thread时, 该Event就会自动复位,变成无信号. 如果想在每次调用WaitForSingleObject 后让WINDOWS为您自动地把事件地状态恢复为”无信号”状态,必须把该参数设为FALSE,否则,您必须每次调用ResetEvent函数来清除事件的信号。
bInitialState 初始状态,true,有信号,false无信号
lpName 事件对象的名称。您在OpenEvent函数中可能使用。
注释:
一个Event被创建以后,可以用OpenEvent()API来获得它的Handle,用CloseHandle() 来关闭它,用SetEvent()或PulseEvent()来设置它使其有信号,用ResetEvent() 来使其无信号,用WaitForSingleObject()或WaitForMultipleObjects()来等待其变为有信号.
PulseEvent()是一个比较有意思的使用方法,正如这个API的名字,它使一个Event 对象的状态发生一次脉冲变化,从无信号变成有信号再变成无信号,而整个操作是原子的.
对自动复位的Event对象,它仅释放第一个等到该事件的thread(如果有),而对于人工复位的Event对象,它释放所有等待的thread.
这里有两个API函数用来修改事件对象的信号状态:SetEvent和ResetEvent。前者把事件对象设为”有信号”状态,而后者正好相反。
在事件对象生成后,必须调用WaitForSingleObject来让线程进入等待状态,该函数的语法如下:
WaitForSingleObject proto hObject:DWORD, dwTimeout:DWORD
hObject --指向同步对象的指针。事件对象其实是同步对象的一种。
dwTimeout -- 等待同步对象变成”有信号”前等待的时间,以毫秒计。当等待的时间超过该值后无信号同步对象仍处于”无信号”状态,线程不再等待,WaitForSingleObject函数会返回。如果想要线程一直等待,请把该参数设为INFINITE(该值等于0xffffffff)。