0

データベースからデータを取得して、テキストエリアに表示しています。javascriptをカウントダウンする文字があります。textarea(s)は、データベース/テーブルのエントリごとに繰り返されています。

<SCRIPT type="text/javascript">
<!-- Begin
    function textCounter(field,cntfield,maxlimit) {
        if (field.value.length > maxlimit) // if too long...trim it!
            field.value = field.value.substring(0, maxlimit);
// otherwise, update 'characters left' counter
        else
            cntfield.value = maxlimit - field.value.length;
}
//  End -->
</script>

これがphpです:

echo "<b>$ID : $adname</b><br /><a href=\"?action=deletead&IDnum=$ID\">Delete Ad</a><br /><br />\n";
    echo "Preview :<br /><div class=\"adcode\">$adcode</div><br /> \n";
    echo "<br />\n";
    echo "<form action=\"displayads.php\" name=\"addAD$ID\" method=\"post\">\n";
    echo "AD code (can be any type of script) text link, javascript or banner :<br />\n";
    echo "Code :<br /><textarea name=\"adcode$ID\" wrap=\"physical\" cols=\"60\" rows=\"5\" onKeyDown=\"textCounter(document.addAD$ID.adcode$ID,document.addAD$ID.remLen$ID,5000)\" onKeyUp=\"textCounter(document.addAD$ID.adcode$ID,document.addAD$ID.remLen$ID,5000)\">$adcode</textarea>";
    echo "<br /><input readonly type=\"text\" name=\"remLen$ID\" size=\"3\" maxlength=\"3\" value=\"5000\">Characters Left \n";
    echo "<input type=\"submit\" name=\"editad$ID\" value=\"Edit AD Code\"></form>\n";
    echo "<br /><hr />";

問題は、onloadページのロードイベントを実行して、一意の名前textarea name = \ "adcode $ID\"を持つすべてのtextareaに正しい文字数のonloadを反映させるにはどうすればよいかということです。代わりに、テキストエリアの情報を変更した場合にのみ適切な量が反映されるようになりました。

4

2 に答える 2

1

それを行うための迅速で汚い方法は、textareasをループして、onkeyupイベントにバインドされた関数を起動することです...

(function () {
    var textareas = document.getElementsByTagName('textarea'),
        i = 0;
    for (i = 0; i < textareas.length; i += 1) {
        textareas[i].onkeyup();
    }
}());​

アップデート:

はい、これはロード時に実行するか、少なくともtextareasがレンダリングされた後に実行する必要があります。

function addHandler(obj, evType, fn) {
    if (obj.addEventListener) {
        obj.addEventListener(evType, fn, false);
        return true;
    } else if (obj.attachEvent) {
        var r = obj.attachEvent("on" + evType, fn);
        return r;
    } else {
        return false;
    }
}
addHandler(window, 'load', function () {
    var textareas = document.getElementsByTagName('textarea'),
        i = 0;
    for (i = 0; i < textareas.length; i += 1) {
        //fire off the "onkeyup" handler.
        textareas[i].onkeyup();
    }
});

また:

<!-- this script block should be inserted after all of the textareas. -->
<script type="text/javascript">
    (function () {
        var textareas = document.getElementsByTagName('textarea'),
            i = 0;
        for (i = 0; i < textareas.length; i += 1) {
            //fire off the "onkeyup" handler.
            textareas[i].onkeyup();
        }
    }());
</script>
于 2012-10-06T01:13:37.287 に答える
0

または、phpで処理することもできます。

$adcode = substr($adcode,0,5000);

echo '<input readonly type="text" name="remLen' . $ID . '" ' .
         'size="3" maxlength="3" value="' . (5000 - strlen($adcode)) . '">' . 
         'Characters Left' . PHP_EOL;
于 2012-10-06T01:25:15.707 に答える