2011-08-04 16 views
0

私はデータベースから情報を集めるためにphpでビルドされたテーブルを持っています。これらの中で、私はクリックされると、estimatedCostの値を取得し、それを計算し、チェックされたすべてのオブジェクトの実行中の合計を保持するJavaScript関数にスローするチェックボックスを持っています。Javascriptによる詳細チェックボックス

私がしようとしているのは、すべてのチェックを作成し、必要な変数を他のJavaScript関数に引き渡すすべてのオプションを選択解除することです。

これは、タイトルの横にチェックボックスを表示します。

foreach($replace as $key => $value) 
    { 
    $jScript = 'onclick=\'calcTotals("'.$replace[$key]['estimatedCost'].'","'.$replace[$key]['optionItem_id_replaceOrRepair'].'","'.$replace[$key]['service_title'].'","'.$replace[$key]['maintenanceitem_id'].'");\''; 
    $checkbox = sprintf('<input type="checkBox" name="ids[]" id="%s" value="%s" %s>', $replace[$key]['maintenanceitem_id'], $replace[$key]['maintenanceitem_id'], $jScript).'&nbsp;'; 
    $replace[$key]['title'] = $checkbox.$replace[$key]['title']; 
    $replace[$key]['estimatedCost'] = $replace[$key]['estimatedCost']; 
    } 

これは、現在はすべてをチェックして、すべてのリンクのチェックを外している:私はJavaScriptで持って

echo '<a href="#" onClick=\'setCheckboxes("budgeting", true); return false;\'>Check All</a>&nbsp;|&nbsp;'; 
    echo '<a href="#" onClick=\'setCheckboxes("budgeting", false); return false;\'>Uncheck All</a>'; 

現在の機能:

function setBudgetCheckboxes(the_form, do_check) { 
     var elts  = (typeof(document.forms[the_form].elements['ids[]']) != 'undefined') 
         ? document.forms[the_form].elements['ids[]'] 
         : (typeof(document.forms[the_form].elements['ids[]']) != 'undefined') 
       ? document.forms[the_form].elements['ids[]'] 
       : document.forms[the_form].elements['ids[]']; 
     var elts_cnt = (typeof(elts.length) != 'undefined') 
         ? elts.length 
         : 0; 
     if (elts_cnt) { 
      for (var i = 0; i < elts_cnt; i++) { 
       elts[i].checked = do_check; 
       var name = document.getElementById(name); 
      } // end for 
     } else { 
      elts.checked = do_check; 
     } // end if... else 
     return true; 
    } 

そして、他の、ハンドル一度に1つずつクリック:

function calcTotals(amount, type, service, name) { 
     if(amount[0] == '$') { 
      amount = amount.substr(1,amount.length); 
     } 
     var id = type+"_"+service+"_selected"; 
     var grand_id = "Grand_selected"; 
     var grand_service_id = "Grand_"+service+"_selected"; 
     var type_id = type+"_selected"; 

     var checked = document.getElementById(name).checked; 

     var multiplier = -1; 

     if(checked) { 
      multiplier = 1; 
     } 

     amount = amount * multiplier; 

     addBudgetValue(amount, id); 
     addBudgetValue(amount, grand_id); 
     addBudgetValue(amount, grand_id+"_h"); 
     addBudgetValue(amount, type_id); 
     addBudgetValue(amount, grand_service_id); 
     addBudgetValue(amount, grand_service_id+"_h"); 
    } 
function addBudgetValue(amount, id) { 
     var current_value = document.getElementById(id).innerHTML; 
     var curtmp = 0; 
     if(current_value == "$0") { 
      current_value = amount; 
     } 
     else { 
      curtmp = parseFloat(current_value.substr(1,current_value.length)); 
      current_value = (curtmp+parseFloat(amount)); 
     } 
     var newVal = "$"+Number(current_value).toFixed(2); 
     if(newVal == "$0.00") 
      newVal = "$0"; 
     document.getElementById(id).innerHTML = newVal; 
    } 

これは問題です:すべてをチェックしてすべてのボックスをチェックし、その情報をcalcTotals関数に渡して値が正しく追加されるようにするにはどうすればよいですか?

+0

上記のコードをすべて手作業で解釈するのではなく、現在の「すべてをチェックする」方法から見ている動作を説明することで、より簡単にできますか? jQueryについてよく知っていますか? – JellicleCat

+0

一度に1つずつチェックボックスをオンにすると、現在のランニングコストにestimatedCostの値が追加され、ページのフローティングテーブルに表示されます。アイテムの選択と選択解除に応じて上下に移動します。すべてのチェックボックスをオンにするとすべてのチェックボックスがオンになりますが、すべての費用は加算されません。(副作用として、チェックボックスを手動で選択解除すると、コストが負になり始めます。) – IceBlueFire

答えて

1

ここにあなたが探しているもの(と思う)んjsfiddleです:http://jsfiddle.net/kz9gU/1/

私は推定コスト(HTML5あたりとして準拠した仕様)を格納するためのカスタムdata-*属性を使用していますので、それはで定義されていますチェックボックスのタグ。チェックボックスをオンまたはオフにすると、各チェックボックスはupdateTotal()関数を呼び出しますが、引数は一切渡しません。 updateTotal()は、チェックボックスをループし、data-cost属性から各金額を読み取り、合計を表示します。

チェック/チェック解除機能は、値を計算する必要はありません。彼らはすべてをチェック/チェックを外し、updateTotal()に電話してください。

編集:Heh、ちょうどあなたがjQueryを使用していないことを認識しました。 jQueryを自分で使用していなくても、jQueryを当然受け入れ始めています。あなたがフィドルで見るものは、おそらくjQueryベースのJSの中で最も長い部分です。私は実際に書いています:)
ブラウザの相違を滑らかにするために、とにかく何らかの種類のライブラリを使用することをお勧めします.jQuery今、ヒープの王様です。

しかし、ライブラリかどうかにかかわらず、コードはどのように進むことができるかのアイデアを与える必要があります。

+0

http://jsfiddle.net/s8L2M/2/​​ - これは負の値と小数の値を処理し、クリックハンドラーをマークアップにバインドしません。 ;) –

+0

これらはどちらも本当に役に立ちますが、jQueryにはあまり精通していないので、代わりにJavaScriptであれば良いでしょう。しかし、それの背後にあるロジックを助けてくれてありがとう! – IceBlueFire

+0

@TeslaNick:ええ、 'onclick'属性もありませんでしたが、私はOPの元のコードの_all_を変更したくありませんでした:)しかし、あなたが正しいです、それはマークアップ。ところで、鉱山はマイナスの値をうまく処理するはずですが、小数点以下の値については、浮動小数点の価格を避けるのが最善です。むしろすべてを100倍してセントにし、必要に応じて100で割ります。あなたはそのような浮遊小数点問題を危険にさらすことはありません。私はそれについてのコメントで早くフィドルを更新しました。 – Flambino

0

私はあなたを理解してくれることを願っています。チェックをしたい、すべての機能をオフにしますか? http://jetlogs.org/jquery/jquery_select_all.htmlその後、PHPでチェックボックス配列を取得し、情報を渡します。PHPでは、配列の値をチェックしてステートメントを実行するループを実行します。

+0

ページを変更することなくこれを実行できる必要があります。実行中の合計を表示するフローティングテーブルがページにあります。 – IceBlueFire

+0

ページリフレッシュで結果を送信したいのですか? – Grigor

+0

ああ、ちょっと。チェックボックスがどこで宣言されているかを見ると、変数$ estimatedCostを渡す独自のjavascript関数が定義されています。これは、すべてチェックボタンで問題が発生している変数です。 – IceBlueFire

関連する問題