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の関数が要素のコンテキストではなく、デフォルトのスコープで呼び出されるため、オブジェクトになります。2つ目は、ちょっとしたアドバイスです{。暗黙のセミコロン挿入の時点で、改行から始めるべきではありません。

于 2013-03-12T09:07:54.497 に答える