【问题标题】:In Osclass, can't call JavaScript function在 Osclass 中,无法调用 JavaScript 函数
【发布时间】:2013-03-12 08:42:56
【问题描述】:

在 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

问题出在哪里?

【问题讨论】:

    标签: javascript osclass


    【解决方案1】:

    变化:

    <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);
    });
    

    会更好。

    【讨论】:

      【解决方案2】:

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

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

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

      用这个:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-10-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-20
          • 2018-04-08
          • 1970-01-01
          相关资源
          最近更新 更多