2013-03-12 100 views
0

在OsClass, 這是我的代碼,從footer.php在Osclass,不能調用JavaScript函數

<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 

問題在哪裏?

回答

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

從onclick屬性運行的代碼不會在放置它的節點上下文中觸發,因此「loc」在locat函數中未定義。

要解決它,你可以取代這個:

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

與此:

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

看來你form對象覆蓋你locat功能(至少是像在Safari在Mac上) - 最後你試圖調用這個元素而不是你的函數。只是改變你的函數名稱,它應該工作,除了其他的事情。首先this不會是你想要的元素,它將是window對象作爲onclick中的函數在默認範圍內調用,而不是元素的上下文。第二件事是一個小建議 - 你不應該從隱含分號插入的新行開始{