表示専用inputをsubmitしない方法

このQ&Aのポイント
  • 表示専用のinputをsubmitする方法について悩んでいます。
  • ページ内のすべての<readonly>属性を持つinputを無効化してsubmitしないようにする方法について助言を求めます。
  • jQueryを使用して<readonly>属性を持つinputを無効化するコードを書きましたが、うまく動作しません。助けが必要です。
回答を見る
  • ベストアンサー

表示専用inputをsubmitしない方法

ゆえあって、表示用の <input readonly="readonly"> を多用するページがあります。 さて、このページを submit したところ、 「HTTPステータス 400 - POST パラメーターが最大制限を超えています。」 と表示され、送信すべき他のデータがうまく送信できません。 そこで jQueryを用いて submit時に、 ページ内にあるすべての <input readonly="readonly"> の input をすべて disabled="disabled" と変更して、 これらを送信対象としない方策を検討しています。 下記のように記述しましたがなかなかうまくいかず、お知恵を拝借したいのです。 何卒よろしくお願いいたします。 ----- // 表示専用inputをsubmitしない jQuery(function($){ $("form").submit(function() { var l = document.getElementsByTagName("input"); for(var i in l){ if (l[i].is(':readOnly')) { l[i].attr("disabled", "disabled"); } } }); });

質問者が選んだベストアンサー

  • ベストアンサー
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.3

JQuery を使ってと言いつつ、DOM方式と混ざってるのが敗因のようです。 <script src="jquery-1.8.1.min.js" type="text/javascript"></script> <script type="text/javascript" > $(function(){ $("form").submit(function() { $('input[readOnly]').attr('disabled',true); /* input 要素の 属性[readonly] を持ってる全てに対して、属性 disabled を設定 */ } ); // onsubmit end }); </script>

tomatsu777
質問者

お礼

ありがとうございました! たしかに getElementsByTagName と混在させるのはよくありませんでした。 こちらの記述で要求どおりの処理が行われました。

その他の回答 (2)

  • gorusura
  • ベストアンサー率59% (25/42)
回答No.2

JavaScript が off だった場合はどうするのですか。 JavaScript は飾りです。 JavaScript が使わずにHTMLを書いてから、JavaScript であれこれするんです。 大抵の場合、設計が悪い可能性が高いです。

tomatsu777
質問者

お礼

ご指摘ありがとうございます。 本件は管理画面上でして、限定したブラウザにてJavaScriptの実行が可能であることを前提に制作しております。 とはいえ、あまりクライアントサイドで無茶な処理をしないよう、設計には気をかけるようにいたします。

回答No.1

Array.prototype.forEach.call (document.querySelectorAll ('input[readonly]'),function (e) { e.disabled = true; }); もし、jQuery が不要で、上が動く環境なら1行で。

tomatsu777
質問者

お礼

ありがとうございました! No.3 様の記述と併せて実行してみたところ、この1行で実現が出来ました。

関連するQ&A

  • 2つのjavascriptを組み合わせたい

    フォームメール用の2つのjavascriptがあります。 ●2重送信防止とデータ送信後指定ページへ遷移するjavascript ●テキストボックスが空欄だった時にアラートを表示するjavascript の2つです。 この2つを組み合わせようとしたのですが、うまく動きません。 ご指導いただきたくお願いいたします。 *************************************************** 【●2重送信防止とデータ送信後指定ページへ遷移するjavascript】【動きます】 送信ボタン押下後、2重送信を防止しながら、データ送信後は「location.href = "finish.html"」でfinish.htmlを表示します。 <script type="text/javascript" src="js/jquery.js"></script> <script> jQuery(function($) { $('#form1').submit(function(event) { // HTML送信キャンセル event.preventDefault(); //フォーム要素取得 var $form = $(this); // 送信ボタンを取得 // (後で使う: 二重送信防止) var $button = $form.find('button'); // 送信 $.ajax({ url: $form.attr('action'), type: $form.attr('method'), data: $form.serialize() + '&delay=1', timeout: 10000, // 送信前 beforeSend: function(xhr, settings) { // ボタン無効二重送信防止 $button.attr('disabled', true); }, // 応答後 complete: function(xhr, textStatus) { // ボタン有効再送信許可 $button.attr('disabled', false); }, // 通信成功処理 success: function(result, textStatus, xhr) { // 入力値初期化 $form[0].reset(); location.href = "finish.html"; }, // 通信失敗処理 error: function(xhr, textStatus, error) { alert('retry');} }); }); }); </script> <form name="form1" id="form1" method="POST" name="form1" action="insert.php"> <input type="text" name="tel" value="" /> <input type="text" name="fax" value="" /> <input type="submit" value="送信A"> </form> *************************************************** 【●テキストボックスが空欄だった時にアラートを表示するjavascript】【動きます】 テキストボックスが空欄だったらアラートを表示します。 <script> function check3() {   var tel3 = document.form1.tel.value;   var fax3 = document.form1.fax.value;   var isValid = true;   if (!tel3) {     alert("電話未入力");     isValid = false;   }   if (!fax3) {     alert("FAX未入力");     isValid = false;   }   if (!isValid) {     return;   }   document.form1.submit(); } </script> <form name="form1" id="form1" method="POST" name="form1" action="insert.php"> <input type="text" name="tel" value="" /> <input type="text" name="fax" value="" /> <input type="submit" value="送信B" onclick="check3();"> </form> *************************************************** 【上記の2つを組み合わせてみました。】【動きません】 テキストボックスが空欄だったらアラートを表示しながら2重ボタン排除&finish.htmlに遷移というものです。 【結果】 「問題なく動くjavascript」2つを単純に組み合わせただけなのですが、 finish.htmlに遷移せずinsert.phpが表示されます。ご指導宜しくお願いします。 <script type="text/javascript" src="js/jquery.js"></script> <script> jQuery(function($) { $('#form1').submit(function(event) { event.preventDefault(); var $form = $(this); var $button = $form.find('button'); $.ajax({ url: $form.attr('action'), type: $form.attr('method'), data: $form.serialize() + '&delay=1', timeout: 10000, beforeSend: function(xhr, settings) { $button.attr('disabled', true); }, complete: function(xhr, textStatus) { $button.attr('disabled', false); }, success: function(result, textStatus, xhr) { $form[0].reset(); location.href = "finish.html"; }, error: function(xhr, textStatus, error) { alert('retry');} }); }); }); </script> <script> function check3() {   var tel3 = document.form1.tel.value;   var fax3 = document.form1.fax.value;   var isValid = true;   if (!tel3) {     alert("電話未入力");     isValid = false;   }   if (!fax3) {     alert("FAX未入力");     isValid = false;   }   if (!isValid) {     return;   }   document.form1.submit(); } </script> <form name="form1" id="form1" method="POST" name="form1" action="insert.php"> <input type="text" name="tel" value="" /> <input type="text" name="fax" value="" /> <input type="submit" value="送信B" onclick="check3();"> </form>

  • submitについて

    <script type="text/javascript"> <!-- function go() { document.getElementsByTagName("input")[3].value+="text"; } //--> </script> <form name="NAME1" action="#" method="get" onSubmit="go()"> <input type="submit" name="submit1" value="送信1" > <input type="submit" name="submit2" value="送信2"> <input type="button" name="submit3" value="送信3" onClick="go()"> <input type="text" name="text1" size="10"> </form> なのですが、送信2のsubmitを4回クリックすると以下のように表示されるのですが、どういう感じで実行されているのかわかりませんので教えていただけないでしょうか? 一応一回目はtext1=textとなるのですがテキストボックスには空になります。 2回目はtext1=textとなりテキストボックスにはtextが入ります。 3回目はtext1=texttextとなりテキストボックスには空になります。 4回目はtext1=textとなりテキストボックスは空になります。 以上よろしくお願いします。

  • (jQuery)同じクラス名のオブジェクトを一斉操

    jQueryで同じクラス名のオブジェクトを一斉操作するにはどうしたら良いでしょうか? 【したいこと】 3つのチェックボックスのいずれかにチェックを入れると disabledである「お問合わせ」と「お申込み」ボタンがクリックできるようにしたいです。 1つでもチェックが入っていなければボタンはdisabledにしたいです。 【現状】 3つのチェックボックスの1番上のclass="foo"のみクリックすると動作します。 ▼【 HTML 】 <input type="checkbox" class="foo"> <input type="checkbox" class="foo"> <input type="checkbox" class="foo"> <input type="submit" class="bar" value="お問合わせ"> <input type="submit" class="bar" value="お申込み"> ▼【 jQuery 】 // アクセス時はボタンは無効にする。 $(document).ready(function(){   $('.bar').attr('disabled', true); }); // チェックボックスクリックアクション $('.foo').click(function() {   $('.bar').each(function() {     if($('.foo').prop('checked') == true) {       $('.bar').attr('disabled', false);     } else {       $('.bar').attr('disabled', true);     }   }); }); ご教授の程どうぞ宜しくお願い致しますm(__)m

  • inputのオートコンプリート時の取得判定

    下記のようなソースで実験中です。 logとpassが両方入っていればボタン有効化、入ってない場合無効化、というのが意図ですが、ページ表示した直後、オートコンプリートでpassが入力されている場合に正しく判定しません。logは有無判定ちゃんと出来ました。 これは解決策というのはあるのでしょうか? よろしくお願いします。 //HTML <form><input name="log" id="user" type="text"><input name="password" name="pass"><input type="submit" value="Login" name="submit"></form> //jquery $('input[name="log"]').each(function(){ $(this).on("load focus",function(){ if($this.val()==''||$this.next('input[name="pass"]').val()==''){ $this.parents('form').find('input[name="submit"]').prop("disabled",true); }else{ $this.parents('form').find('input[name="submit"]').prop("disabled",false); } }); });

  • div要素内の全input要素をdisable

    Javascriptで、あるdiv要素内のチェックボックスやテキストフィールドなどのinput要素を すべてdisableにしたいです。 以下でうまくいきません。どなたかお知恵を頂けないでしょうか? よろしくお願い致します。 var input_tags = document.getElementById("div_id").getElementsByTagName("input"); for(var input_tag in input_tags) { input_tag.disabled = true; }

  • jquery inputのvalue値を表示解除

    jqueryでチェックボックスがチェックされたらvalue値をテキストボックスに表示するプログラムです。 全選択をすると全チェックボックスにチェックが入り全てのvalue値を取得表示します。 [問題点] (1):まずどれかチェックボックスを選択しておきます。 (2):次に全選択を選択後、全選択を再び選択する(全解除)と(1)で選択した値がテキストボックスに残ってしまい、チェックが反転した形になってしまいます。 補足:チェックしたらvalue値を取得するのが正常なのですが、この問題点でチェックが外れたらvalue値を取得するに反転してしまう。 [求] 何かヒントになるようなプログラムを教えてもらえないでしょうか? もしくは原因を教えて下さい。 宜しくお願いします。 以下プログラム ========= $(function(){ //チェックボックス var check = $('input[name="check"]'); var check_flag = false; //全てを選択/解除 var checkall = $('input[name="checkall"]'); //テキストボックス var box = $('input[name="searchBox"]'); //テキストボックスのvalue値 var txt = box.val(); //チェック判定 $.each(check,function(i) { if ($(this).attr('checked')==true) { check_flag = true; return false; } }); //全て選択解除 checkall.change( function(){ //全てチェックする処理 $(this).parents('#check:eq(0)').find(':checkbox').attr('checked',this.checked); //配列生成 var arry = []; //チェックボックスのvalue値を格納 check.each( function(){ arry.push($(this).val()); }); //チェックボックスを一つずつ表示 var i=0; while( i < arry.length ){ //正規表現 var reg = new RegExp( arry[i] + ' ' ); //もしフラグがtrueで且つ //クリックした箇所のvalue値と一致するテキストがボックス内に表示されていたら if( !check_flag && txt.match( reg ) ){ //ボックス内のvalue値削除 txt = txt.replace( reg,'' ); }else{ //それ以外ならクリックした箇所のvalue値+スペースを代入 txt += arry[i] + ' '; } box.val(txt); i++; } }); //各項目チェック check.change(function(){ //クリックした箇所のvalue値取得 var data = $(this).val(); //正規表現 var reg = new RegExp( data + ' ' ); //もしフラグがtrueで且つ //クリックした箇所のvalue値と一致するテキストがボックス内に表示されていたら if( !check_flag && txt.match( reg ) ){ //ボックス内のvalue値削除 txt = txt.replace( reg,'' ); }else{ //それ以外ならクリックした箇所のvalue値+スペースを代入 txt += data + ' '; } //結果を表示 box.val( txt ); }); });

  • radioをクリックするとSubmitを表示

    現在フォームを作成しています。 ちょっとした確認セクションを作りたいと思っています。 ラジオチェックをクリックするとwindow.comfrimが表示され「送信を希望されますか?」という確認を表示し、OKをクリックするとフォームの下に送信ボタンの<input type="submit" value="送信">が表示されるようにしたいと考えています。 自力で書いたソース: <javascript> function check(){ if(window.confirm('送信を希望しますか?')){ //ここでSubmitを表示さるプロセス? } } </javascript> <input type="radio" name="check" value="1" onClick="check()">送信希望 よろしくお願いします。

  • 複数のラジオボタン選択肢によりsubmitを押せなくする

    初めて質問させていただきます。 ラジオボタンが下記の選択状態の時だけ「送信(submit)」ボタンを enable で表示させたいです。 1:● 2:○ 1:● 2:○ それ以外の選択肢では「送信(submit)」ボタンを disabl で押せないようにしたいです。 調べて、近い動作にはなりましたが、javascriptに関して 殆ど知識がないため、これから先がさっぱりわかりません。 ぜひ教えを乞いたく参りました。お知恵をお貸しください<(__)> どうぞ宜しくお願い致します。 <HTML> <HEAD> <script type="text/javascript"><!-- function unlock1(el){el.form.send.disabled=false;} function unlock2(el){el.form.send.disabled=true;} //--> </script> <form> 1:<input type="radio" name="radio1" value="1" onClick="unlock1(this)"> 2:<input type="radio" name="radio1" value="2" onClick="unlock2(this)"><br> 1:<input type="radio" name="radio2" value="1" onClick="unlock1(this)"><br> 2:<input type="radio" name="radio2" value="2" onClick="unlock2(this)"><br> <input name="send" type="submit" value="送信" disabled > </form> </BODY> </HTML>

  • INPUT TYPE=""submit"" の disabled をJavascriptで操作したい

    ご教授、お願いします。 <!-- function Kyoka(){ if(document.form02.ch_on.checked) { alert (""); document.form02.ilai2.disabled = false; } else { document.form02.ilai2.disabled = true } { // --> とスクリプトを記述し <TD><INPUT TYPE="checkbox" NAME="ch_on" VALUE="" onclick="Kyoka()"></TD>" <TD><FONT COLOR=green><INPUT TYPE="submit" name="irai2" VALUE="依頼" onClick="javascript:location.reload()"></TD>" と、body内に記述しています。 このとき、チェックボックスにチェックを入れると、アラートは表示されますが、その後でエラー(IEの右下のバーに「!」が表示)になります。 数時間悩みましたが、わかりません。 どなたかご教授頂けませんでしょうか? よろしくお願いします。 また、submitボタンのon/offをjavascriptを使わずに行う方法が、あるのでしょうか? もしあれば教えて頂ければ、幸いです。

  • jQueryを使ってランダムに表示

    jQueryを使って5つのボックス要素を、ランダムに3つ表示させています。 現在はページを読み込むたびに表示を切り替えていますが、これを「一定時間で表示を切り替え」に変更する事は可能でしょうか? できればjsのみの修正でできれば良いのですが…。 どなたかお助けください。よろしくお願いいたします。 jsとhtmlは以下のようにしています。 jQuery(function($) { $.fn.extend({ randomdisplay : function(num) { return this.each(function() { var chn = $(this).children().hide().length; for(var i = 0; i < num && i < chn; i++) { var r = parseInt(Math.random() * (chn - i)) + i; $(this).children().eq(r).show().prependTo($(this)); } }); } }); $(function(){ $("[randomdisplay]").each(function() { $(this).randomdisplay($(this).attr("randomdisplay")); }); }); }); <div randomdisplay="3"> <div id="box">ランダム1</div> <div id="box">ランダム2</div> <div id="box">ランダム3</div> <div id="box">ランダム4</div> <div id="box">ランダム5</div> </div>

専門家に質問してみよう