0

ユーザーからファイルを取得し、ファイルに名前を付けることもできるHTMLフォームを正常に作成しました。また、アップロードストリームからファイルの名前を取得し、名前のみ(パスと拡張子なし)を取得できるjavascript関数を作成することに成功しました。問題は、アップロードの名前を変更するためにそこにある入力を変更することができません。これは、2つの実証的なアラートを伴う仕事関数です。

<script type="text/javascript">
function updateInput(val) {
    som = val.split('\\')[val.split('\\').length - 1];
    som = som.split('.')[0];
    alert('Hey 1');
    fileName.value = som;
    alert('Hey 2');
}; </script>

「Hey1」アラートが表示され、問題ありません。「Hey2」は実際には表示されません!fileNameは、ファイル名の入力の名前IDの両方です。私は、 document.getElementById(' fileName ')。value = ...を使用してみましたが、うまくいきませんでした。

fileNameの宣言:

<input type="text" runat="server" id="fileName" name="fileName" />

javascriptは、この入力の下のコードにあります。uploadImage入力(ファイルのタイプ)は、この入力の上にあります。(はい、イベントが呼び出され、somは私が望む値を取得します)

* input:text要素の値を変更しようとしています。varのことを試してみます。

あなたが助けることができればありがとう!

4

1 に答える 1

2

私があなたの問題を理解している限り、以下のコードはうまくいくはずです:

<script type="text/javascript">
function updateInput(val) {
    var som = val.split('\\')[val.split('\\').length - 1];
    som = som.split('.')[0];
    alert('Hey 1');
    document.getElementById('<%=fileName.ClientID %>').value = som;
    alert('Hey 2');
}; </script>

のためrunat="server"、ブラウザの要素のIDは、ファイルに表示されるものとは異なり.aspxます。HTML要素のIDはのようなものになるCotentPlaceholder1_fileNameので、それdocument.getElementById('fileName')を見つけられずdocument.getElementById('fileName').value = son;、エラーをスローします。

同じ問題fileName.value = som;-私が理解している限り、あなたはIEの機能を使用しようとしています(IEのみの機能かどうかはわかりませんが、使用することはありませんが、そのようなものがあることを覚えておいてください)。要素のID。IDはfileNameとは異なるため、変数名も異なります。

runat="server"ブラウザにあるような要素のIDを取得するには.ClientID、サーバー側オブジェクトのプロパティを使用できます。

また、var関数スコープ内で変数を定義するためにを使用する必要があります。のようにvar som = val.split('\\')[val.split('\\').length - 1];updateInputこのようにすると、グローバルスコープ(関数外)には表示されません。そうしないと、将来的に問題が発生する可能性があります

于 2012-12-18T11:48:16.410 に答える