質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

2回答

1845閲覧

Formのどれかに文字が入っている場合にajaxを止めたい

退会済みユーザー

退会済みユーザー

総合スコア0

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2016/11/13 14:11

ページを開くと、DBから取得したレコードを一覧表示します。
フレームワークはcodeigniterを使用しています。
そのときにページ上部に複数の検索項目があります。
普段はajaxで一覧部分だけ5秒ごとに更新し、最新のレコードを取得し表示しています。

html

1<form> 2 <label for="text1">No</label><input type="text" name="text1"><br> 3 <label for="text2">日付</label><input type="text" name="text2"><br> 4 <label for="text3">日付</label><input type="text" name="text3"><br> 5 <label for="text4">種類</label><input type="text" name="text4"><br> 6 <label for="text5">コード</label><input type="text" name="text5"><br> 7 <button>検索</button> 8</form> 9<div id="list"> 10<table> 11 <tr> 12 <th>No</th> 13 <th>日付</th> 14 <th>名前</th> 15 <th>種類</th> 16 <th>コード</th> 17 </tr> 18 <?php foreach($list as $key1 => $val1): ?> 19 // ここでCodeigniterで取得したレコードを表示 20 <?php endforeach; ?> 21</div>

5秒ごとにajaxで最新のレコード用のcodeigniterのメソッドにアクセスし、<div id="list">の中だけ更新しています。

javascript

1$(function(){ 2 setInterval(function(){ 3 $('#list').load('/list/saishin_hyouji'); 4 },5000); 5});

html

1// 表示用html 2<div id="list"> 3<table> 4 <tr> 5 <th>No</th> 6 <th>日付</th> 7 <th>名前</th> 8 <th>種類</th> 9 <th>コード</th> 10 </tr> 11 <?php foreach($list as $key1 => $val1): ?> 12 // ここでCodeigniterで取得したレコードを表示 13 <?php endforeach; ?> 14</div>

これで、5秒ごとに更新はできているんですが、この更新をinputのどれか一つでも値が入っていたら、ajaxを止めたいです。

javascript

1 2 var timer; 3 var start = function() { 4 timer = setInterval(function(){ 5 var path = location.pathname.slice(25); 6 $('#list').load('/admin/visitors/situation_view' + path); 7 },5000); 8 } 9 10 $('input').bind('keydown keyup keypress change',function(){ 11 if($(':input').val() == "") { 12 console.log("start"); 13 start(); 14 } else { 15 console.log("stop"); 16 stop(); 17 } 18 }); 19 20 if($('input').val() == "") { 21 console.log("start"); 22 start(); 23 }

このようなことを試したりしましたが、5秒ごとの更新が複数回、行われてしまいうまくとまりません。
他には

javascript

1 var timer; 2 var start = function() { 3 timer = setInterval(function(){ 4 var path = location.pathname.slice(25); 5 $('#list').load('/admin/visitors/situation_view' + path); 6 },5000); 7 } 8 9 $('input').bind('keydown keyup keypress change',function(){ 10 console.log("stop"); 11 stop(); 12 }); 13 14 if($('input').val() == "") { 15 console.log("start"); 16 start(); 17 }

このようなこともしましたが、これではinputが空になったときにページを更新しないとajaxで更新が始まりませんでした。

詳しい方いらっしゃいましたら、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

コードが長いですが、以下でできると思います。

JavaScript

1setInterval(function(){ 2 var flag = false; 3 4 $('form input').each(function() { 5 if($(this).val() !== '') { 6 flag = true; 7 8 return false; 9 } 10 }); 11 12 if (!flag) { 13 $('#list').load('/list/saishin_hyouji'); 14 } 15},5000);

投稿2016/11/14 00:43

mukkun

総合スコア882

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/11/14 02:03 編集

ご回答ありがとうございます! この方法で更新を止めたり再開したりすることができました。 同じ方法でselectが2つあるパターンも試してみましたが、こちらは上手くいきませんでした。 ``` setInterval(function(){ var flag = false; $('form select').each(function() { if($(this).val() !== 0) { flag = true; return false; } }); if (!flag) { $('#list').load('/list/saishin_hyouji'); } },5000); ``` どちらのselectの初期値も0です。 コンソールを確認しても、$(this).val()はしっかり0となっているんですけどね。 変更したときに止まってくれません。。。 selectでは同じ方法はそもそも無理なんですかね。
退会済みユーザー

退会済みユーザー

2016/11/14 02:05

上記のselectの件ですがページ内の他のselectがあったのですが、それが原因でした。。。 失礼いたしました。 これで全て解決しました。 ありがとうございました。
guest

0

5秒周期を生かしたまま、読み込みだけとめたいのであれば、
setInterval(function(){
の、loadメソッド直前で、特定項目の入力があれば、
loadしないようにifで分岐すればどうでしょうか。

投稿2016/11/14 00:39

akio221

総合スコア716

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/11/14 01:49

ありがとうございます。 eachと分岐で止めたり、再開したりすることができるようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問