2012-10-06 13 views
0

我從數據庫中提取數據並將其顯示在textarea(s)中。我有一個字符倒數的JavaScript。 textarea(s)正在從數據庫/表中爲每個條目重複。javascript onload事件爲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的名字= \「adcode $ ID \「反映正確的字符數onload。相反,現在只有在更改textarea中的信息時才反映正確的數量。

回答

1

一個快速和骯髒的方式做到這一點是通過文本域環路和斷火綁定到onkeyup事件的函數...

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

UPDATE:

是的,這應該在加載時運行,或者至少在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> 
+0

這會是一個onload事件。我無法得到它的工作onkeyup – Caiapfas

+0

感謝您的幫助。該代碼幫助我瞭解如何使用所需的數學函數將所有'textarea'或其他表單字段類型加載到函數中。 謝謝!!! – Caiapfas

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; 
+0

我不明白這是如何工作的。我試圖使用它並將其編輯成沒有運氣的工作,還有更多的細節。對於php – Caiapfas

+0

第一行只是處理你的JS爲了將長度減少到5000個字符所做的相同的事情,第二行應該用來代替上面代碼中的「剩餘字符」輸入。它計算將在textarea中的文本長度,並顯示用戶在達到5000之前剩下的字符數量。您仍然需要使用JS來處理使用情況的動態更改,但使用上面你不需要擔心在頁面加載時觸發該JS - 除非你的JS做了比控制「剩餘字符」值更花哨的東西嗎? – Pebbl