繁体   English   中英

为什么此onclick事件在Android和iPhone上不起作用?

[英]Why is this onclick event not working on Android and iPhone?

我正在使用Prototype JavaScript库创建动态下拉菜单。 在页面加载之前,没有事件附加到id为id_branid_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文档:

http://prototypejs.org/learn/

http://api.prototypejs.org/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM