0

次のスクリプトがあります。

if (Object.isUndefined(Axent)) { var Axent = { } }
 Axent.SelfLabeledInput = Class.create({
initialize: function() {
    var labelSelector = arguments[0] || 'label';
    $$(labelSelector).findAll(function(l) {return (l.readAttribute('for') !== null)}).each(function(l){
        l.hide();
        $(l.readAttribute('for'))._value = l.innerHTML;
        if ($(l.readAttribute('for')).value.empty()) {
            $(l.readAttribute('for')).value = $(l.readAttribute('for'))._value
        }
        $(l.readAttribute('for')).observe('blur',function(e){if(Event.element(e).value == '') Event.element(e).value = Event.element(e)._value;});
        $(l.readAttribute('for')).observe('focus',function(e){if(Event.element(e).value == Event.element(e)._value) Event.element(e).value = '';});
    });
}
});

そして、次のフォーム:

    <form name="comform" action="#" method="post" id="commentform">
    <div class="input"> 
<p>
<label for="comment">Type your comment here...</label>
<textarea name="comment" id="comment" rows="8" cols="10" class="" ></textarea>
</p>
</div>
    <div class="input">
<p>
<label for="author">Name (required)</label>        
<input type="text" name="author" id="author" size="22" class=""/>
</p>
</div>
    <div class="input">
<p>
<label for="email">Email (gravatar enabled) (required)</label>         
<input type="text" name="email" id="email" size="22" class=""/>
</p>
</div>
    <div class="input">
<p>
<label for="url">Website (optional)</label>        
<input type="text" name="url" id="url" size="22" />
</p>
</div>
    <div class="submit">
<input type="submit" name="submit" id="sub" value="Leave comment" /> 
<input type="hidden" name="comment_post_ID" id="hidden" value=""> 
</div>

</form> 
<script type="text/javascript">
//<![CDATA[
new Axent.SelfLabeledInput('#commentform label');
//]]>
</script>

このスクリプトから関数を作成して、このフォームで送信を押したときに入力フィールドにフォーカスがあると、非表示/クリアしてデータベースに送信されないようにしたいと考えています。

これは、最新のプロトタイプ ライブラリで動作します。私は JavaScript をまったく知らないので、あなたの助けが必要です。WordPress のコメント欄にこのフォームを使用しています。

4

3 に答える 3

2

私はついにそれを働かせました!他の誰かが実行したい場合の最終的なコードは次のとおりです。

if (Object.isUndefined(Axent)) { var Axent = { } }
Axent.SelfLabeledInput = Class.create({
initialize: function() {
    var labelSelector = arguments[0] || 'label';
    $$(labelSelector).findAll(function(l) {return (l.readAttribute('for') !== null)}).each(function(l){
            l.hide();
            var el = $(l.readAttribute('for'));
            el._value = l.innerHTML;
            if (el.value.empty()) {
                    el.value = el._value
            }
            el.observe('blur',function(e){if(Event.element(e).value == '') Event.element(e).value = Event.element(e)._value;});
            el.observe('focus',function(e){if(Event.element(e).value == Event.element(e)._value) Event.element(e).value = '';});
    $(el.form).observe( 'submit', (function(thisel) { return function(e) {
            if( thisel.value == thisel._value ) { thisel.value = '' }
    }})(el));
    });
}});
于 2009-01-18T12:56:17.017 に答える
0

心配する必要はありません。ラベルは送信されません。

このスクリプトは、送信時にDOMからラベルを削除します。DOMがロードされた後に実行する必要があり(少なくともフォーム)、フォーム要素がラベル内にある場合はそれらも消えます!

document.getElementById( 'commentform' ).onsubmit = function() {
    var labels = this.getElementsByTagName( 'label' );
    while( labels[0] ) {
        labels[0].parentNode.removeChild( labels[0] );
    }
    return true;
} 

これはプロトタイプスクリプトではありません。それはプレーンオールドジャバスクリプトです

于 2009-01-17T23:02:41.207 に答える
0

要素には、ラベルテキストが事前に入力されています。フォーカスすると、要素がまだ空の場合、デフォルトのテキストが消えてぼかしで再表示されます。

あなたはこれを試すことができます。私はプロトタイプを使わないので、場所によっては推測です。

if (Object.isUndefined(Axent)) { var Axent = { } }
Axent.SelfLabeledInput = Class.create({
initialize: function() {
    var labelSelector = arguments[0] || 'label';
    $$(labelSelector).findAll(function(l) {return (l.readAttribute('for') !== null)}).each(function(l){
        l.hide();
        var el = $(l.readAttribute('for'));
        el._value = l.innerHTML;
        if (el.value.empty()) {
            el.value = el._value
        }
        el.observe('blur',function(e){if(Event.element(e).value == '') Event.element(e).value = Event.element(e)._value;});
        el.observe('focus',function(e){if(Event.element(e).value == Event.element(e)._value) Event.element(e).value = '';});
        $(el.form).observe( 'submit', (function(thisel) { return function(e) {
            if( thisel.value == thisel._value ) { thisel.value = '' }
        }})(el));
    });
}
于 2009-01-18T00:34:55.233 に答える