通过id获取元素不起作用

时间:2014-05-29 18:13:34

标签: javascript

我正在尝试让我的谷歌地图显示多个位置,但如下所示的onclick没有进入我的功能b。我究竟做错了什么?感谢

的Javascript

function b(){
dlat=40.856771;
dlng=0.578294;
alert(dlat);
getLoc();
 }

function init() { 
document.getElementById("click").onclick = b;
 }

 window.onload = init

HTML

    <ul data-role="listview" data-split-icon="star" data-split-theme="a">
            <li><a href="#1"><h1>task1</h1></a><a href="#popup" id="click" data-rel="popup" data-position-to="window" data-transition="fade"> </a></li>
        </ul>


        <div data-role="popup" id="popup" data-overlay-theme="a" data-theme="a" data-corners="false" data-tolerance="15,15">
            <a href="#" data-rel="back" data-role="button" data-theme="a" data-icon="delete">Close</a>

            <iframe src="map.html" width="320" height="320" seamless></iframe>
        </div>

1 个答案:

答案 0 :(得分:0)

在没有看到您的整个情况的情况下,事件委派可以解决您的问题。基于我的最小信息,我使用事件委派来完成函数调用:http://jsfiddle.net/uufS3/1/

document.getElementById("container").addEventListener("click", b, false);


function b(){
    dlat=40.856771;
    dlng=0.578294;
    alert(dlat);
    getLoc();
}

当然,这意味着您需要在页面上拥有某种预先存在的元素。我添加了一个容器div,但它可能(并且可能应该是)body标签本身。

如果这是一个大型应用程序,此解决方案也可以帮助解决内存泄漏问题。

如果您的应用/网站需要支持较旧的IE版本,除了addEventListener之外,还要查看like this内容。

您是否必须拥有init功能?它比你列出的更多吗?如果没有,我建议放弃它,因为它不是解决这个特定问题所必需的。似乎window.onload在你的情况下是不必要的,除非(就像我说的那样)该函数执行其他未列出的事情。

更新 Here is more info on how to use logic in event delegation...假设您最终将其附加到正文标记,则您需要过滤点击次数。