0

私はこのウェブサイトを研究などによく利用しており、非常に便利です。

入力ID名のリストを取得し、javascript/jqueryを使用してそこに値を追加するコードを少し開発しています。

これは私がこれまでに持っているものです-私はまだ初心者なので、それはマークからかなり外れているかもしれません。

これまでのところ、コードは入力の名前をうまく取得しています。計算もうまくいきますが、配列を「var fieldnames」に入れると、計算が機能しなくなりますか?

配列を(入力に入れた後)コピーして「varfieldnames」に貼り付けると、正常に機能します。

問題は、配列が「varfieldnames」に正しく渡されないことのようです。

このページのコードは次のとおりです。調査目的でのみ配列を下部の入力に配置しますが、入力名を手動で入力しない限り、計算は機能しません。

どんな助けでも大歓迎です。ありがとう

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
</head><body>




<script type="text/javascript" language="javascript">
function getTotal(oForm)
  {
var arrayOfIDs = $('.myClass').map(function() { return this.id; }).get();
var test = (arrayOfIDs.length ? "'" + arrayOfIDs.join("','") + "'" : "");

 document.getElementById("sum").value = test;

  var field, i = 0, total = 0, els = oForm.elements;
  var fieldnames = [test];

  document.getElementById("sum1").value = fieldnames;

  for (i; i < fieldnames.length; ++i)
  {
  field = els[fieldnames[i]];
  if (field.value != '' && isNaN(field.value))
  {
  alert('Please enter a valid number here.')
  field.focus();
  field.select();
  return '';
  }
  else total += Number(field.value);
  }
  return ' ' + total;
  }
</script>




<div id="listing">
<form>
<table>
<td>8065020</td>
<td>2012-04-10</td>
<td>household</td>
<td><input    class="myClass" id="pay47" type="text" name="pay47" value="38.45"/></td>
</tr>
<tr>
<td>8065021</td>
<td>2012-04-10</td>

<td>household</td>
<td><input   class="myClass" id="pay48" type="text" name="pay48" value="37.4"/></td>
</tr>
<tr>
<td>8065022</td>
<td>2012-04-10</td>
<td>household</td>
<td><input   class="myClass"  id="pay49" type="text" name="pay49" value="375"/></td>
</tr>
<tr>
<td>8065014</td>
<td>2012-04-04</td>

<td>household</td>
<td><input type="text"  class="myClass"  id="pay50" name="pay50" value="06"/></td>
</tr>
<tr>
<td>8065015</td>
<td>2012-04-04</td>
<td>motorprotect</td>
<td><input type="text"  class="myClass"  id="pay51" name="pay51" value="01"/></td>
</tr>
<tr>
<td>8065011</td>
<td>2012-03-06</td>

<td>household</td>
<td><input type="text"   class="myClass" id="pay52" name="pay52" value="55"/></td>
</tr>
<tr>
<td>8065012</td>
<td>2012-03-06</td>
<td>household</td>
<td><input type="text"  class="myClass"  id="pay53" name="pay53" value="56"/></td>
</tr>
<tr>
<td>1</td>
<td/>

<td>household</td>
<td><input type="text"   class="myClass" id="pay54" name="pay54" value="56"/></td>
</tr>
<tr>
<td>2</td>
<td/>
<td>household</td>
<td><input type="text"  class="myClass"  id="pay55" name="pay55" value="52"/></td>
</tr>
<tr>
<td>3</td>
<td/>
<td>household</td>

<td><input type="text"  class="myClass"  id="pay56" name="pay56" value="53"/></td>
</tr>
<tr>
<td>4</td>
<td/>
<td>household</td>
<td><input type="text"  class="myClass"  id="pay57" name="pay57" value="55"/></td>
</tr>
<tr>
<td>8065001</td>
<td/>
<td>landlord</td>
<td><input type="text"  class="myClass"  id="pay58" name="pay58" value="5"/></td>

</tr>
<tr>
<td>8065002</td>
<td/>
<td>landlord-basic</td>
<td><input type="text"   class="myClass" id="pay59" name="pay59" value="59"/></td>
</tr>
<tr>
<td>8065003</td>
<td/>
<td>household</td>
<td><input type="text"  class="myClass"  id="pay60" name="pay60" value="5"/></td>
</tr>

<tr>
<td>8065004</td>
<td/>
<td>household</td>
<td><input type="text"  class="myClass"  id="pay61" name="pay61" value="5"/></td>
</tr>
<tr>
<td>8065005</td>
<td/>
<td>household</td>
<td><input type="text"   class="myClass" id="pay62" name="pay62" value="5"/></td>
</tr>
<tr>

<td>8065006</td>
<td/>
<td>landlord-basic</td>
<td><input type="text"   class="myClass"  id="pay63" name="pay63" value="64"/></td>
</tr>
<tr>
<td>8065008</td>
<td/>
<td>household</td>
<td><input type="text"   class="myClass" id="pay64" name="pay64" value="5" /></td>
</tr>
<tr>
<td>8065010</td>

<td/>
<td>business-basic</td>
<td><input type="text"  class="myClass"  id="pay65" name="pay65" value="10" /></td>
</tr>
</table>


<input id="total" type="text" name="total" value="" readonly="readonly" /> 
<input type="button" value="Get Total" onclick="total.value=getTotal(this.form)" />
<br /><br />
<input name="totalpay" id="sum" type="text" />sum<br />
<input name="totalpay" id="sum1" type="text" />sum1
</form>
</div>






</body>
</html>
4

2 に答える 2

0

私があなたの質問を正しく理解し、基本的な妥当性チェックを提供しながら、値を合計したいだけの場合、コードは複雑になります。jQueryのようなフレームワークは、これをはるかに簡単にする手段を提供します。

すべての入力要素をループしてIDを取得してから再度ループするのではなく、1回だけ実行します。

var getTotal (oForm) {
    var sum = 0;
    // loop through all inputs with class "myClass" inside oForm
    $("input.myClass", $(oForm)).each(function (index, value) {
        // add up all values that are non empty and numeric
        if (value !== "" && !isNaN(value)) {
            // parse the value
            sum += parseFloat(value, 10);
        } else {
            // show an alert, focus the input and return early from $.fn.each
            alert("Please enter a valid number here!");
            $(this).focus();
            return false;
        }
    });

    // set the value of 
    $("sum").val(sum);
}

これは私の頭のてっぺんから書かれましたが、うまくいくはずです。

于 2012-07-17T12:17:02.020 に答える
0

1-ラインを交換します

var test = (arrayOfIDs.length ? "'" + arrayOfIDs.join("','") + "'" : "");

var test = (arrayOfIDs.length ? arrayOfIDs.join(",") : "");

2-交換

var fieldnames = [test];

var fieldnames = test.split(",");

3-交換

field = els[fieldnames[i]];

field = document.getElementById(fieldnames[i]);

私がここで行ったことは、問題を解決するためのコードを修正することだけですが、これをより簡単な方法で実行できると確信しています。

于 2012-07-17T12:43:06.800 に答える