在Osclass中,无法调用JavaScript函数

时间:2013-03-12 08:42:57

标签: javascript osclass

在OsClass中, 这是我的代码,来自footer.php

<div id="footer">
    <div class="footer">
        <div id="footer_1" class="col">
            <h1>location</h1>
            <ul>
                <form action="<?php echo osc_base_url(true); ?>" method="get" class="search" name="locat">
                    <input type="hidden" name="page" value="search" />
                    <input type="hidden" id="sCity" name="sCity" value="" />
                    <li id="1" onclick="locat();"> mysore</li>
                    <li id="2" onclick="locat();">bhfgh</li>
                </form>
            </ul>
        </div>
    </div>
</div>

JavaScript是(放在同一页面中)

<script type="text/javascript">
    function locat()
    {
        var city = $(this).attr('id');
        alert(city);
    }   
</script>

这里,JS功能不起作用。它给出了

Uncaught TypeError: object is not a function 
    onclick

问题在哪里?

3 个答案:

答案 0 :(得分:2)

变化:

<li id="1" onclick="locat(this);"> mysore</li>

和JS:

function locat(obj) {
    var city = $(obj).attr('id');
    alert(city);
}

否则你在错误的上下文中执行locatwindow而不是点击元素)。

但是,无论如何,这是绑定事件的正确方法,因为您使用的是jQuery。它可能是:

 <li class="city" id="1">mysore</li>
 <li class="city" id="2">bhfgh</li>

和这个结构的jQuery代码:

$('.city').click(function() {
    var city = $(this).attr('id');
    alert(city);
});

会更好。

答案 1 :(得分:1)

从onclick属性运行的代码,不会在它所放置的节点的上下文中触发,因此在locat函数中未定义“this”。

要解决此问题,您可以将其替换为:

<li id="1" onclick="locat();"> mysore</li>

用这个:

<li id="1" onclick="locat.call(this);"> mysore</li>

答案 2 :(得分:0)

似乎你的form对象正在覆盖你的locat函数(至少就像在Mac上的Safari中那样) - 最后你试图调用元素而不是你的函数。只需更改您的功能名称,它应该可以工作,除了其他事情。首先,this将不是您想要的元素,它将是window对象,因为onclick中的函数在默认范围内调用,而不是元素的上下文。第二件事是一些建议 - 你不应该从隐含分号插入的新行开始{