• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:jQueryでDOM生成後に値を取るとNULL)

jQueryでDOM生成後に値を取るとNULL

このQ&Aのポイント
  • jQueryを使ってDOMの中身を生成した後に、値を取得しようとするとNULLになってしまいます。
  • ajaxでDOMの中身を生成して挿入しても、html本体には中身の無い状態となっているため、値がNULLとなります。
  • ページ読み込み時にDBから値を取得してリストボックスを生成し、その値を使って別のDOMを生成する自動化は困難です。

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5096/13322)
回答No.3

> ajax通信を行っている関数の中の場合は、.doneの中に次にしたい処理を書けば、ajax通信完了後に処理をしてくれると思うんですが、ajax通信を行っている関数の外側で次の処理を書いている場合は、どのようにしてajax通信を行っている関数が処理が完了したかを判定すれば良いのでしょうか? .done の中から次の処理を書いた関数を呼び出すなどと言った方法だったり、setTimeout とか使って定期的にDOMの状態を確認して中身が入っていたら次の処理を実行とかって事になるんですが、処理の階層がどんどん深くなってしまうので Promise とか使って同期処理のようにプログラムを書くのがスマートかもしれませんね。

Rubellite
質問者

補足

なるほど、時間を指定してDOMの状態をチェックして処理を実行したり、Promiseを使ったりして対処するんですね。 ヒントをいただけたので、再度よく勉強して、改良してみます! ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • t_ohta
  • ベストアンサー率38% (5096/13322)
回答No.2

> DOM生成→値取得という一連の流れでやるとNULLになる理由がよくわからなくて困っています... 選択をしているのであればタイミングの問題ですね。 JavaScriptを基本的に非同期で動作するので、<select>にoptionを追加する命令や値を選択する命令を実行してもDOMの生成が終わる前に次のステップへ進んでしまいます。 なので、前の処理が確実に終わっていないと出来ない処理は前の処理が終わった事を確認してから実行するようにしないといけません。

Rubellite
質問者

補足

>非同期で動作するので >前の処理が終わった事を確認してから実行 やはりそうですよねぇ。そんな気はしていました... ajax通信を行っている関数の中の場合は、.doneの中に次にしたい処理を書けば、ajax通信完了後に処理をしてくれると思うんですが、ajax通信を行っている関数の外側で次の処理を書いている場合は、どのようにしてajax通信を行っている関数が処理が完了したかを判定すれば良いのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • t_ohta
  • ベストアンサー率38% (5096/13322)
回答No.1

中身が追加されてもセレクトボックスで何も選択していないからと言う事はありませんか?

Rubellite
質問者

補足

ご回答ありがとうございます。 selectを生成しているajaxの.doneのところに、 $('#user').prop('selectedIndex', 1); という感じで、indexを指定して選択状態にしてもNULLが返ってきます。 DOMを生成しているajaxの外側、 var user_id = $("#user").val(); の一つ上のところに、 $('#user').prop('selectedIndex', 1); としても、やはりNULLが返ってきます。 button等に値を取得する関数を設定すれば、キチンと値を取ることが出来るので、DOM生成→値取得という一連の流れでやるとNULLになる理由がよくわからなくて困っています...

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • javascriptのDOMについてなんですが・・・

    閲覧有難うございます。 JavaScriptのDOMを用いてテキストボックスを生成しようと考えているのですがうまくいきません。 <form name="form" action="index2.php"> <select id="factor" onchange="swicthForm()"> <option value="0">選んでください</option> <option value="1">1個</option> <option value="2">2個</option> <option value="3">3個</option> <option value="4">4個</option> <option value="5">5個</option> </select> </form> <br> <script type="text/javascript"> function swicthForm(){ var options = document.form.factor.value; alert(options); } } </script> を用いてSELECTでいくらを選んだかが表示することが出来ました。 alert(options)の値の分だけテキストボックスなり何なりを生成したいのですがうまくいきません。 どの様にしたらテキストボックスなどを表示できますか?

  • JavaScripsのDOMについてなんですが…

    閲覧ありがとうございます。 以前にSelectボックスで選んだ値の分だけテキストボックスの生成を行う方法を伺い、生成することが出来るようになりました。 (1)生成したテキストボックスを改行して表示がしたい。 (2)生成したテキストボックスの右隣にSelectボックスを生成し、Selectボックスで1~8の値を扱い、選んだ数値の分のテキストボックスをSelectボックスの右隣に生成するもの。 以下がSelectボックスで選んだ数値の分だけテキストボックスを生成するプログラムです。 <form name="form" action="index2.php"> <select id="factor" onchange="swicthForm(this)"> <option value="0">選んでください</option> <option value="1">1個</option> <option value="2">2個</option> <option value="3">3個</option> <option value="4">4個</option> <option value="5">5個</option> </select> </form> <br> <script type="text/javascript"> function swicthForm(obj){ var n=obj.nextSibling; while(n){ var m=n.nextSibling; if(n.nodeName=="INPUT" && n.type=="text") n.form.removeChild(n); n=m; } for(var i=0; i<parseInt(obj.value);i++){ var e=document.createElement("input"); e.setAttribute("type","text"); e.setAttribute("name","test"+(i+1).toString()); obj.form.appendChild(e); } } </script> よろしくお願いします。

  • jqueryで小計値の合算が出来ません・・・

    jqueryで計算した小計の値を合算したいのですが・・・ <div id="oa"> <select name="pa" id="value_pa"> <option value="0">選択して下さい</option> <option value="100">梅</option> <option value="200">竹</option> <option value="300">松</option> </select>× <select name="n" id="value_n"> <option value="0">選択して下さい</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select>個=<span id="result_a"></span>円 </div> のように5種類の計算をして<span id="result_x"></span>の間に結果を埋め込んでいます。 この<span id="result_a"></span>から<span id="result_e"></span>の小計値をボタンを押すことにより合算して合計値を出したいのですが、うまくいきません。 jqueryでどのようにしたらいいのでしょうか? 教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • AJAX
  • DBの値をリストボックスの初期位置にしたい

    php,mysqlを使ってホームページを作っています。 ユーザー登録で入力した値をDBに書き込み、次にユーザー登録情報編集でその値をリストボックスに表示させたいのですがやり方を教えてください。DBに書き込むところまではできましたが、編集画面がうまく作れません。 (例) リストボックス  --- ←ユーザー登録画面での初期位置  東京  神奈川  千葉 リストボックス  東京  神奈川 ←DBに書き込まれた値が初期位置になるようにしたい  千葉 <select size="1" name="area"> <option value="" selected>--- <option value="東京">東京</option> <option value="神奈川">神奈川</option> <option value="千葉">千葉</option>

    • ベストアンサー
    • PHP
  • 複数選択された値を取得したい

    複数選択可のリストボックスを使用してパラメータをPOSTで送った時、その値の取得方法がわかりません。 例えば <select name="select" multiple> <option value="01">01</option> <option value="02">02</option> <option value="03">03</option> <option value="04">04</option> <option value="05">05</option> </select> というリストボックスがあります。 02、03、04を選択して送信した時に、$_POST[select]の中には04しか入っていません。 選択された値を配列にして全て取得したいのですが、どのようにすれば良いのでしょうか? アドバイスをお願いします。

    • ベストアンサー
    • PHP
  • jQueryにてformの中を書き換えました。

    jQueryにてformの中を書き換えました。 具体的には、 $.ajax({ url: "add.php", type: "get", dataType: "html", timeout: 10000, cache: false, data: { "name" : "test", }, success: function(html){ $("#list").html(html); } }); を実行し、結果を #list に置き換えています。 結果は、 <input name='item_name' value='1' id='item_name_1' type='radio'> <label for='item_name_1'>ほげほげ</label> となっています。 しかし、Postをしてみると、item_name が取得することができず NULL として帰ってきます…。。 ajaxで書き換えたformから値を取得したいです。

    • ベストアンサー
    • AJAX
  • セレクトボックスのonchanngeでvalueとtext以外の値を取得

    <環境> struts1.3.8 jdk1.4 今回以下のような処理を可能であればJavaScriptを用いて作りたいのですがどうしても実現方法がわかりません。 ※formBeanには、value、name、otherという項目があります。 (1)セレクトボックスから値を選択 (2)onchangeが発生し、formBean.otherをid="otherView"のspanに表示する。 <select name="select_box" onchange="getOptionOtherValue()"> <logic:iterate id="list" collection="<%=bean.getList() %>" type="beans.formBean"> <option value="<%=list.getValue() %>"> <%=list.getName() %></option> </logic:iterate> </select> <span id="otherView"></span> サーバーに処理を戻さずに、selectIndex等を駆使して、何か良い方法はないでしょうか?ちなみに、Ajaxは使用しておりません。 出来ない場合は、出来ないというご返答でも構いません。 一人で開発しており、あきらめがつかないでいます。 どうぞ、よろしくお願いします。

  • jQueryでajax

    ajax(jQuery使用)を使った以下のサンプルは、 セレクトボックスを選択すると、ボタンを表示するのですが、 そのボタンをクリックしても、アラート(This is success!)が表示されません。 ajaxで吐き出した<button>ボタン</button>のボタンのクリックイベントが 検知しないような感じですが、いったいどこが間違っているのかわかりません。 どなたか、ご教授いただけると助かります。 htmlソース ------------------------------------------- <meta http-equiv="content-script-Type" content="text/javascript" /> <meta http-equiv="content-style-Type" content="text/css" /> <link rel="stylesheet" href="./photo.css" media="all" /> <title> テスト</title> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function() { $("button").click(function() { alert("Test is success!"); }); $(".first").change(function() { var param = ''; $.ajax ({ type: "POST", url: "ajax.php", data: param, cache: false, success: function(res) { $("#result").html(res); } }); }); }); </script> </head> <body> <select name="first" class="first" id="first"> <option value="1">項目1</option> <option value="2">項目2</option> </select> <p>結果:</p> <div id="result" style="width:808px;"></div> </body> </html> phpソース ---------------------------------------- <?php echo '<button>ボタン</button>'; ?>

    • ベストアンサー
    • AJAX
  • フォームのメニューリストを外部ファイルを読み込んで動的生成する方法

    お世話になっております。 下記のような処理を実現したいのですが、どうも良い方法が 見つかりません。できるならばHTMLページにJavascriptを 埋め込む形で実現したいのですが、可能でしょうか。また 可能であればその方法もご教授頂けないでしょうか。 ・HTML内、フォームエレメントのメニューリストの項目を  外部ファイルを読み込んで動的に生成したい <select name="select"> <option value="1">リスト1</option> <option value="2">リスト2</option> <option value="3">リスト3</option> </select> 上記のvalueの値とリスト1、リスト2、リスト3の 部分を外部ファイルを読み込んで生成したいのです。 外部ファイルの内容は、CGIによって別途更新されます。 以上不足部分は補足致します。 どうぞよろしくお願いします。

  • [jQuery]イベント定義時のコールバック関数に引数を渡したい

    ■以下のHTMLが1~5の5個あるとします。 <select id="test_list1"> <option value="1">あいうえお</option> <option value="2">かきくけこ</option> </select> <div id="test_txt1"></div> ■jqueryで以下のように、セレクトボックスを変更したら、それに紐づくdivタグのテキストを書き換えるとします。 var test = 5; for (i=1; i <= test; i++) { $("#test_list"+ i).change( function() { $("#test_txt"+ i ).text('変更されました。'); }); } change()イベント時は、iの値が正常なんですが、 text()で書き換え時は、iの値が常に5になってしまいます。 text()で書き換え時のiは、イベント定義時のiではないということは分かるのですが、 解決の方法がわかりません。 こんなふうに引数として渡すことはできないのでしょうか? $("#test_list"+ i).change( function( i ) { $("#test_txt"+ i ).text('変更されました。'); }); ご教示願います。。