0

同じ名前の一連のテキストボックスがあります

<%for(i=0;i<=nooftasks;i++){%>
<input type="text" id="duration"
name="duration" class="td4" onkeyup="durationFormat()">
}%>

Javascript では、2 桁の後にコロンを追加する必要があります

function durationFormat()
{
    var duration = document.getElementsByName("duration").value;
    if(duration.length==2){
        duration=duration+":";
    }
}

textboxしかし、その特定のテキスト ボックスから文字列を取得できなかったため、目的の結果を得ることができませんでした。

何か案は?

4

3 に答える 3

2

getElementsByNameElement ではなく NodeList を返します。NodeList は配列のようなものです。それをループして、変更を各値に順番に適用する必要があります。

(要素を返す)を使用getElementByIdし、入力に一意の ID を持っていたとしても (そうではありません。これは無効です。修正してください)、それでも値は変更されません。プロパティを変数にコピーしてから変更しても、入力valueのプロパティは変更されません。value変更を行った後、戻ってから戻る必要がありinput.value = durationます。


関数を呼び出した特定の入力を取得する場合は、次のようにします。

  1. 固有のイベント属性の使用を停止します。彼らは苦痛です
  2. addEventListener代わりに使用
  3. イベント委任を使用して、ハンドラーのアタッチを簡素化します
  4. target プロパティを調べて、どの入力が呼び出されたかを判断します

そのような:

<fieldset id="durations">
<legend>Durations</legend>
<%for(i=0;i<=nooftasks;i++){%>
<input type="text" name="duration" class="td4">
}%>
</fieldset>

<script>
    function durationFormat(ev) {
        var input = ev.target;
        if (input.value.length === 2) { 
            input.value += ":";
        }
    }
    document.getElementById('durations').addEventListener('keyup', durationFormat);
</script>
于 2013-05-14T11:32:37.557 に答える
2
 <input type="text" id="duration" name="duration" class="td4" onkeyup="durationFormat(this)">
<script>
 function durationFormat(obj) {
     if ((obj.value.length)== 2) {
         obj.value+=":";
     }

 }
</script>
于 2013-05-14T11:36:39.733 に答える
1

name で要素にループする必要がありますduration

function durationFormat() {
    var duration = document.getElementsByName("duration");

    for (var i = 0; i < duration.length; i++) {
        if(duration[i].value == 2){
            duration[i].value += ":";
        }
    }
}

これのロジックは次のとおりです。

  • まず、そのプロパティに値をelements持つ属性名を持つものをすべて取得します。duration
  • 次に、メソッドを呼び出したときに取得した要素の配列内でループする必要があります.getElementsByName
  • :最後に、値が の場合、値の末尾にa を付けて各要素の値を設定する必要があります2

何が何をするのかわからない人のために、配列の位置にduration[i].value += ":";ある入力要素の値を自動的に取得し、その値を最後にi追加します。:する場合とまったく同じですduration[i].value = duration[i].value + ":";+=ソーターなので、私は を使用することを好みます。テストしたことはありませんが、ブラウザが最後にコンテンツを追加する最速の方法でもあると思います。文字列変数にも使用できます。

于 2013-05-14T11:36:14.713 に答える