[英]Why is this onclick event not working on Android and iPhone?
我正在使用Prototype JavaScript库创建动态下拉菜单。 在页面加载之前,没有事件附加到id为id_bran
和id_gen
的select语句。 可以看出,页面加载时将调用init_image
,并将onclick
事件附加到这些select语句。
在可以使用鼠标执行click事件的桌面上,此方法工作正常。 但是,它不适用于我的Android和iPhone浏览器。 页面加载时,将init_image
被称为和getval
执行功能。 但是,稍后,当我在下拉菜单中进行选择时, onclick
事件不会调用getval
函数。 因此,我有信心原型库可以在我的Android和iPhone上运行,因为在页面加载时发出了ajax请求,但随后失败了。 这是怎么了
<!--
MY HTML body->onload
The init_image is called the first time when the page is loaded
-->
<body onLoad="init_image();">
//Javscript function called on page load
function init_image() {
getval();
//Assigning the event to id_gen and id_bran for mouse clicks
document.getElementById("id_gen").onclick = getsize;
document.getElementById("id_bran").onclick = getsize;
};
//Javascript function called on page load and during mouse click on the select
//statement with id = id_bran and id_gen
function getval() {
ur = 'szv/c1--'+$F('id_bran')+'/g1--'+$F('id_gen');
new Ajax.Request(ur,
{
method:'get',
onSuccess: function(transport){
var response = transport.responseText;
$('id_val').replace(response);
}
});
};
首先,您要强制注入事件和加载事件,这可能会导致潜在的跨浏览器问题。 如果您使用的是prototype.js,请依靠跨浏览器的本机方法:
<script type="text/javascript">
document.observe("dom:loaded", function() {
.. your code here ..
});
</script>
然后再次用于正确定位和观察单击事件,而不是:
document.getElementById("id_gen").onclick = getsize;
使用类似:
$('id_gen').on('click', getsize(e).bindAsEventListener(this)); // for prototype 1.7 branch
要么:
$('id_gen').observe('click', getsize(e).bindAsEventListener(this)); // for prototype 1.6 branch
另外,通过在此处设置传递e
变量,您的getsize()
函数将在其中具有Event对象,因此您可以停止其本机行为(如导致#):
function getsize(e) {
e.stop();
.. your code here ..
}
此外,如果将整个逻辑锁定在类中并为其创建一个对象,那将是最好的选择,并且不会太肿。但这是一个完全不同的故事... :)
prototype.js是功能强大的工具,但需要多加注意。 我建议您阅读有关该框架的一些基础知识,并在以后阅读API文档:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.