0

次の機能は、何らかの理由で機能しません。誰かが問題が何であるかを見ることができますか?

function checkMaxLen(txt, maxLen) {
    var actualLen = txt.value.length;
    var remain = maxLen - actualLen;
    document.getElementById('remainChar').Value = remain;
}

<input type="text" id="remainChar" runat="server" value="500"/>

関数を実行しようとすると、次のエラーが発生します。

Microsoft JScriptランタイムエラー:プロパティ'Value'の値を設定できません:オブジェクトがnullまたは未定義です

4

4 に答える 4

3

最終的なHTMLの入力のIDを確認してください。ASP.NETを使用しているためrunat="server"、通常のコンテナプレフィックスを追加する可能性があります。

于 2012-11-29T18:51:19.937 に答える
1

主な問題: JavascriptのgetElementByIdの問題はありませんが、正しいIDをgetElementByIdにフィードする際の問題(ASP.NETがrunat = "server"要素のIDを自由に変更できるため)(受け入れられた回答でカバーされています)。これが、OPが報告したエラーの原因です。

Microsoft JScript runtime error: Unable to set value of the property 'Value': object is null or undefined 

これは、getElementByIdに存在しないIDが指定され、nullが返されたためです。

別の問題: 2番目の問題は確かにJavascriptの問題でしたが、getElementByIdにも関連していませんでした。Javascriptでは大文字と小文字が区別されるため、入力要素のDOMオブジェクトのvalueプロパティを設定しようとしても、(存在しない)Valueプロパティを設定しようとしても実行できません。

解決:

両方の問題を解決する正しいコードは次のとおりです。

  function checkMaxLen(txt, maxLen) {
    var actualLen = txt.value.length;
    var remain = maxLen - actualLen;
    document.getElementById('<%= remainChar.ClientId%>').value = remain 
  }

注:私の元の回答で重要な見落としを指摘してくれたIanに感謝します。

于 2012-11-29T18:54:44.987 に答える
0

大文字と小文字を区別:

document.getElementById('remainChar').value
于 2012-11-29T18:51:15.167 に答える
0

.Valueは.valueである必要があり、スクリプトはソースに表示された後、またはDOMReadyイベントが発生した後に実行する必要があります。

また、これはasp.netであるため、ボックスのid属性は「remainChar」ではなく、別の属性に変換されます。

したがって、最終IDが何であるかを確認するか、runat="server"属性を削除する必要があります

<html>
<body>
<input type="text" id="remainChar" value="500"/>
<script>
    function checkMaxLen(txt, maxLen) {
        var actualLen = txt.value.length;
        var remain = maxLen - actualLen;
        document.getElementById('remainChar').value = remain;
    }
    checkMaxLen({value:""},20);
</script>
</body>
</html>
于 2012-11-29T18:55:32.460 に答える