如何将函数绑定到嵌入的单击事件
How to bind a function to click event on an embed
我正在尝试将一个函数绑定到嵌入(Flash 文件)上的点击事件。但问题是支持,所以我正在寻找跨浏览器的解决方案。第一个想法是将 onclick 属性添加到嵌入元素,但在 Chrome (v. 59.0.3071.115) 中永远不会触发点击事件,或者 onclick 不工作...
代码 1:
<embed onclick='myFunction(myOpts)'
class="item"
src="/file.swf">
function myFunction(myOpts){
console.log('is working!!!!');
}
以上代码不适用于 Chrome。所以,我正在考虑以一种新的方式在点击事件上调用此函数:具有 onclick 属性的父级 div 并使用 javascript 触发嵌入点击(播放 Flash),这是代码:
代码 2:
<embed onclick='myFunction(myOpts, event)'
class="item"
src="/file.swf">
function myFunction(myOpts, event){
console.log('is working!!!!');
event.target.getElementsByTagName('embed')[0].click();
}
但是永远不会触发嵌入的点击...所以,我的问题:
有没有办法通过嵌入的点击事件调用函数?如果答案是肯定的,那么在不影响他的行为的情况下调用函数的最佳方式是什么?
如果需要获取当前元素,在onClick函数中传递this
。
然后你就可以在myFunction
里面调用element.click()
了。
onClick="myFunction('test', this)"
function myFunction(myOpts, element) {
console.log(element, 'is working!!!!');
// calling here element.click() will trigger myFunction twice
}
对于那些寻找答案的人,这就是我所做的:
现在我使用 object 标签来显示 Flash 文件 而不是 只是 embed 标签:
<object id="objectId" classid="clsid:D27CDB6E-AE6D-11cf-96BB-444553540000" onmouseup="myFunction(myOpts)"
name="objectName" type="application/x-shockwave-flash" data="flash.swf" width="100%" height="100%">
<param name="movie" value="flash.swf"/>
<param name="quality" value="high"/>
<param name="allowscriptaccess" value="always"/>
<param name="wmode" value="transparent"/>
<embed src="flash.swf" wmode="transparent" width="100%" height="100%" allowscriptaccess="always"
allowfullscreen="true" name="embedName" id="embedId" data="flash.swf">
</embed>
</object>
为了调用 myFunction()
而不会丢失我使用 onmouseup
而不是 onclick
的 Flash 文件的行为。
我正在尝试将一个函数绑定到嵌入(Flash 文件)上的点击事件。但问题是支持,所以我正在寻找跨浏览器的解决方案。第一个想法是将 onclick 属性添加到嵌入元素,但在 Chrome (v. 59.0.3071.115) 中永远不会触发点击事件,或者 onclick 不工作...
代码 1:
<embed onclick='myFunction(myOpts)'
class="item"
src="/file.swf">
function myFunction(myOpts){
console.log('is working!!!!');
}
以上代码不适用于 Chrome。所以,我正在考虑以一种新的方式在点击事件上调用此函数:具有 onclick 属性的父级 div 并使用 javascript 触发嵌入点击(播放 Flash),这是代码:
代码 2:
<embed onclick='myFunction(myOpts, event)'
class="item"
src="/file.swf">
function myFunction(myOpts, event){
console.log('is working!!!!');
event.target.getElementsByTagName('embed')[0].click();
}
但是永远不会触发嵌入的点击...所以,我的问题:
有没有办法通过嵌入的点击事件调用函数?如果答案是肯定的,那么在不影响他的行为的情况下调用函数的最佳方式是什么?
如果需要获取当前元素,在onClick函数中传递this
。
然后你就可以在myFunction
里面调用element.click()
了。
onClick="myFunction('test', this)"
function myFunction(myOpts, element) {
console.log(element, 'is working!!!!');
// calling here element.click() will trigger myFunction twice
}
对于那些寻找答案的人,这就是我所做的:
现在我使用 object 标签来显示 Flash 文件 而不是 只是 embed 标签:
<object id="objectId" classid="clsid:D27CDB6E-AE6D-11cf-96BB-444553540000" onmouseup="myFunction(myOpts)"
name="objectName" type="application/x-shockwave-flash" data="flash.swf" width="100%" height="100%">
<param name="movie" value="flash.swf"/>
<param name="quality" value="high"/>
<param name="allowscriptaccess" value="always"/>
<param name="wmode" value="transparent"/>
<embed src="flash.swf" wmode="transparent" width="100%" height="100%" allowscriptaccess="always"
allowfullscreen="true" name="embedName" id="embedId" data="flash.swf">
</embed>
</object>
为了调用 myFunction()
而不会丢失我使用 onmouseup
而不是 onclick
的 Flash 文件的行为。