前提・実現したいこと
ボタンをクリックした際に、チェックボックスにチェックを付けて
そのままフォーム送信するという処理を行いたいと考えております。
発生している問題・エラーメッセージ
最初の1回目でonclickに設定されているイベントが
拾えません。2回目以降は正常に拾えます。
どうすれば最初の1回目もきちんとイベントを拾えるでしょうか。
該当のソースコード
JavaScript
1<script type="text/javascript"> 2 //チェックボックス 3 function clickCheckBox(){ 4 var clickButton = document.getElementsByName('aButton'); 5 var checkedBox = document.getElementsByName('pitem[]') 6 7 for(var i = 0 ; i < clickButton.length ; i++){ 8 clickButton[i].onclick = (function(ix){ 9 return function(){ 10 console.log(ix); 11 checkedBox[ix].checked=true; 12 }; 13 })(i); 14 } 15 } 16 //Submit 17 function goSubmmit(){ 18 console.log("do!!"); 19 externalfunc(); //外部jsの処理 20 var target = document.getElementById("form1"); 21 target.method = "post"; 22 target.action = "/scripts/hoge.php" 23 return false; 24 } 25</script>
外部のjsになります。別の方が作成したもので、私の方では
修正が禁じられています。
Javascript
1var base_path = '/cart/'; 2 3function externalfunc() 4{ 5 var chkCount = $("[name='item[]']:checked").length; 6 // validate 7 if (chkCount < 1) { 8 alert('選択されていません。'); 9 return false; 10 } 11 $("[name='pitem[]']:checked").each(function(){ 12 codes.push($(this).val()); 13 }); 14 15 var url = location.href; 16 if (debug) { 17 console.log('url: ' + url); 18 } 19 $.ajax({ 20 url: base_path + 'hoge.php', 21 type: 'POST', 22 data: { 23 "action": "addItem", 24 "item[]": codes, 25 "url": url 26 }, 27 dataType: 'json', 28 timeout: ajax_timeout, 29 }).done(function(cartArray, textStatus, jqXHR) { 30 if (debug) { 31 console.log('status: ' + jqXHR.status + ' ' + textStatus); 32 console.log(cartArray); 33 } 34 showModal(cartArray, 'addItem'); 35 }).fail(function(jqXHR, textStatus, errorThrown) { 36 console.log('status: ' + jqXHR.status + ' ' + textStatus + ' ' + errorThrown); 37 console.log(); 38 alert(jqXHR.status + ' ' + errorThrown); 39 }).always(function() {}); 40 return false; 41}
HTML
1<form id="form1" action="#" onsubmit="return goSubmmit();"> 2 <label><input type="checkbox" class="checkbox" name="pitem[]" value="aaa" /></label> 3 <input id="submitbtn" type="image" src="/img/abutton.png" name="aButton" onclick="clickCheckBox();" value="Added"> 4 <label><input type="checkbox" class="checkbox" name="pitem[]" value="aaa" /></label> 5 <input id="submitbtn" type="image" src="/img/abutton.png" name="aButton" onclick="clickCheckBox();" value="Added"> 6 <label><input type="checkbox" class="checkbox" name="pitem[]" value="aaa" /></label> 7 <input id="submitbtn" type="image" src="/img/abutton.png" name="aButton" onclick="clickCheckBox();" value="Added"> 8</form>
試したこと
下記も試してみましたがダメでした。
window.onload=clickCheckBox();
最初の1回目のボタンクリック時にチェックが入りません。
2回目以降ではボタンクリックした際にチェックボックスにチェックが
入り外部js処理後にhoge.phpが動きます。
補足情報(FW/ツールのバージョンなど)
制約があってjqueryは使えず、通常のJavascriptで
解決しないといけません。
回答4件
あなたの回答
tips
プレビュー