2

本当に奇妙で紛らわしいエラーがあります。

これが私のコードです:

{if="$pjax === false"}{include="header"}{/if}
<script type="text/javascript">
    $(document).ready(function() {
        function clickclear(thisfield, defaulttext) {
            if (thisfield.value == defaulttext) {
                thisfield.value = "";
            }
        }
        function clickrecall(thisfield, defaulttext) {
            if (thisfield.value == "") {
                thisfield.value = defaulttext;
            }
        }
    });
</script>
<form action='./login' method='post' name='form'>
<ul class="form">
    <li><input type="text" name="username" value="Username" id="username" onclick="clickclear(this, 'Username')" onblur="clickrecall(this,'Username')"  /></li>
    <li><input type="password" name="password" value="Password" id="password" onclick="clickclear(this, 'Password')" onblur="clickrecall(this,'Password')" /></li>
    <li><span style='display:block;height:27px;float:left;line-height:27px;'>Remember Me</span> <div id='itoggle' style='float:right;'><input type="checkbox" id="remember" class='itoggle' /></div><div class='clearfix'></div></li>
</ul>
</form>
<a href="javascript: form.submit()" class="button white">Login</a>
{if="$pjax === false"}{include="footer"}{/if}

clickclearとの 2 つの関数があることがわかりますclickrecallonClickこれらはとのフォーム入力から呼び出されonBlurます。ただし、それらを実行すると、次の JavaScript エラーが発生します。

Uncaught ReferenceError: clickclear が定義されていません

Uncaught ReferenceError: clickrecall が定義されていません

何か案は?私はそれがおそらく本当に単純なものであることを知っていますが、私はそれを見ることができません.

4

1 に答える 1

5

これは、関数が.ready()コールバックに含まれているためです。これらはグローバルスコープからは見えません(これは良いことです)。

次のようなjQueryのイベント添付メソッドを使用することをお勧めします.on()

$(document).ready(function(){

    //your code
    function clickclear(){...}
    function clickrecall(){...}

    //the handlers
    $('#username').on('click',function(){ //bind click handler
        clickclear(this,'Username');      //things to do on click
    }).on('blur',function(){              //chain blur handler
        clickrecall(this,'Username');     //things to do on blur
    });

    $('#password').on('click',function(){ //bind click handler
        clickclear(this,'Password');      //things to do on click
    }).on('blur',function(){              //chain blur handler
        clickrecall(this,'Password');     //things to do on blur
    });

    ...other handlers...

});

placeholderちなみに、Chromeには、プレースホルダーテキストのように機能する属性があります。

<input type="text" placeholder="username" />
<input type="password" placeholder="password" />
于 2012-05-23T18:40:47.273 に答える