0

在 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

问题出在哪里?

4

3 回答 3

2

改变:

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

和JS:

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

否则,您将locat在错误的上下文中执行(window而不是单击元素)。

但无论如何,这不是绑定事件的正确方法,因为您使用的是 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);
});

会更好。

于 2013-03-12T08:45:31.387 回答
1

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

要修复它,您可以替换它:

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

有了这个:

<li id="1" onclick="locat.call(this);"> mysore</li>
于 2013-03-12T08:45:38.790 回答
0

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

于 2013-03-12T09:07:54.497 回答