在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
问题在哪里?
答案 0 :(得分: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);
});
会更好。
答案 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中的函数在默认范围内调用,而不是元素的上下文。第二件事是一些建议 - 你不应该从隐含分号插入的新行开始{
。