Javascript `事件中自定义属性的未定义值(Firefox)
我有一个test.html页面,代码为():Javascript `事件中自定义属性的未定义值(Firefox),javascript,firefox,iframe,javascript-events,undefined,Javascript,Firefox,Iframe,Javascript Events,Undefined,我有一个test.html页面,代码为(): var paymentEventHandler=函数(e){ 控制台日志(e) console.log('payment:'+JSON.stringify(e.status)) 警报(“状态:”+e.status) } if(文件增补列表器){ document.addEventListener(“付款”,paymentEventHandler) }否则{ 文档.附件('onPayment',paymentEventHandler) } 和ifr
var paymentEventHandler=函数(e){
控制台日志(e)
console.log('payment:'+JSON.stringify(e.status))
警报(“状态:”+e.status)
}
if(文件增补列表器){
document.addEventListener(“付款”,paymentEventHandler)
}否则{
文档.附件('onPayment',paymentEventHandler)
}
和iframe.html:
var事件
if(document.createEvent){
事件=document.createEvent(“HTMLEvents”)
event.initEvent(“付款”,true,true)
}否则{
event=document.createEventObject()
event.eventType='payment'
}
event.status='确定'
if(window.parent.document.dispatchEvent){
window.parent.document.dispatchEvent(事件)
}否则{
window.parent.document.firevent('onPayment',事件)
}
代码可以在Chrome、Safari、Opera中使用,但在Firefox中我得到了未定义的。为什么?
谢谢。您需要创建自定义事件,而不是使用initCustomEvent创建htmlevent和初始化
html
var paymentEventHandler=函数(e){
警报(“状态:”+e.detail.status)
}
if(文件增补列表器){
document.addEventListener(“付款”,paymentEventHandler)
}否则{
文档.附件('onPayment',paymentEventHandler)
}
iframe
var事件
if(document.createEvent){
事件=document.createEvent(“CustomEvent”)
initCustomEvent(“付款”,true,true,{status:“ok”});
}否则{
event=document.createEventObject()
event.eventType='payment'
}
if(window.parent.document.dispatchEvent){
console.dir(事件);
window.parent.document.dispatchEvent(事件)
}否则{
console.dir(事件);
window.parent.document.firevent('onPayment',事件)
}
旧的浏览器版本如何?@TimothyKlim:我已经解决了它,可以在FF上工作了。我没有访问IE的权限。这里有一个链接供您了解[IE]()。我的建议是切换到JQuery,把浏览器兼容性问题留给它来解决。我知道JQuery事件(和其他),但我正在寻找一种不用库就能做到这一点的方法。好的,我将使用CustomEvent。谢谢。我的新方法是:window.paymentEventHandler=函数(状态){console.log(“paymentEventHandler:+JSON.stringify(状态))}和if(window.parent.paymentEventHandler){window.parent.paymentEventHandler({status:'ok'}})else{…events way…}
<!doctype html>
<html>
<head>
<script>
var paymentEventHandler = function (e) {
alert('status: ' + e.detail.status)
}
if (document.addEventListener) {
document.addEventListener('payment', paymentEventHandler)
} else {
document.attachEvent('onPayment', paymentEventHandler)
}
</script>
</head>
<body>
<iframe src='iframe.html'></iframe>
</body>
</html>
<!doctype html>
<html>
<head>
<script>
var event
if (document.createEvent) {
event = document.createEvent("CustomEvent")
event.initCustomEvent("payment", true, true, {status:"ok"});
} else {
event = document.createEventObject()
event.eventType = 'payment'
}
if (window.parent.document.dispatchEvent) {
console.dir(event);
window.parent.document.dispatchEvent(event)
} else {
console.dir(event);
window.parent.document.fireEvent('onPayment', event)
}
</script>
</head>
<body>
</body>
</html>