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

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

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

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

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

Q&A

解決済

2回答

1317閲覧

入力した内容をサーバー側で確認して結果をすぐ表示させるのを、連続で行いたい

tarao

総合スコア28

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

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

0グッド

0クリップ

投稿2017/03/29 09:35

現在、ユーザー情報編集ページを作成中で、名前を変更する際に、入力された名前がデーターベースに存在するかをその場で確認できるようにしたいです。

ajaxでサーバー側に値を渡し、処理をして$messageに結果を入れています。
結果を表示するところまでは、この記述でできたのですが、

そのあと、ユーザーがもう一度名前を入力して送信するということができません。
onmousedownで表示内容を消しても、一度再読み込みしてから "使用できるか確かめる" ボタンを押さないと処理ができない状態です。

再読み込みしなくても、もう一度同じ処理ができるようにするにはどうしたらいいでしょうか?
ご教示お願いします。

html

1<div class="contents-b"> 2<input type="name" class="edit-name" onmousedown="countUpA()"; name="edit_name" value="<?php print($u_name); ?>"> 3<p><button type="button" class="name-conf">使用できるか確かめる</button> 4<p class="test"><?php print($message); ?></php> 5</div><!--contents-b--> 6 7<script> 8 9function countUpA(){ 10 $('input[name="edit_name"]').val(""); 11}; 12 13</script> 14 15

javascript

1$(".name-conf").on("click",function(){ 2 3 var name_check_0 = $(".edit-name"); 4 namecheck0 = name_check_0.val(); 5 6 if(namecheck0!=""){ 7 8 9 $.ajax({ 10 url:"/skima/mypages/user_edit", 11 data:{ 12 "namecheck":namecheck0, 13 }, 14 dataType:"html", 15 type:"post", 16 17 18 }).done(function(data,status,xhr){ 19 20 $("div.contents-b").html(data); 21 22 }); 23 24 25 }//if(namecheck0!="") 26 27 28 29});//$(".name-conf").on("click",function()

php

1 if($this->request->is("ajax")){ 2 3 $namecheck=$this->request->data["namecheck"];//名前使用可能チェック 4 5 6 if($namecheck==""){ 7 8 $message="名前を入力してください"; 9 10 }else{ 11 12 //同じ名前が使われていないかチェック 13 $username=$users->find(); 14 $username->select(['u_name','u_id']) 15 ->where(['u_name'=>$namecheck]); 16 $u_name_values=$username->first(); 17 $name_conf=$u_name_values['u_name']; 18 $u_id_conf=$u_name_values['u_id']; 19 20 21 22 //変更してい名前がすでに使われていた場合 23 if($name_conf!=""){ 24 if($u_id_conf==$user_id){//自分が使っている名前だった場合 25 $message="使用できます"; 26 }else{ 27 $message="この名前はすでに使用されています";//他のユーザーの場合 28 } 29 }else{ 30 $message="使用できます"; 31 }//if($name_conf!="") 32 33 $u_name=$namecheck; 34 35 }//if($namecheck=="") 36 37 38 39 40 41 $this->set(compact("message","u_name")); 42 43 44 }

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

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

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

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

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

guest

回答2

0

ベストアンサー

コールバックでHTMLを書き換えている時に、イベントリスナも破壊されています。
デリゲートするように書き替えてみてください。

javascript

1$(".name-conf").on("click",function(){

javascript

1$(document).on("click",".name-conf",function(){

投稿2017/03/29 09:55

Lhankor_Mhy

総合スコア35869

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

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

tarao

2017/03/29 10:06

ありがとうございます! 思い通りにできました。 また質問なのですが、コールバックでHTMLを書き換えている時というのは .done(function(data,status,xhr){  $("div.contents-b").html(data); }); この処理の時のことでしょうか?
Lhankor_Mhy

2017/03/29 10:10

はい、そのとおりです。
tarao

2017/03/29 10:15

どうもありがとうございました! 勉強になりました!
guest

0

JavaScript

1// namecheck0 = name_check_0.val(); 2// ↓ 3 var namecheck0 = name_check_0.val(); 4

こうでは?

投稿2017/03/29 09:43

kei344

総合スコア69364

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

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

tarao

2017/03/29 09:50

回答ありがとうございます! その部分を直してみましたが、やはり1回目はできても、2回目は再読み込みしないとできない状態です...
kei344

2017/03/29 09:57

.name-confごと書き換えているんですね。よく読んでいませんでした、すみません。Lhankor_Mhyさんの書かれている書き方でできるとおもいます。
tarao

2017/03/29 10:09

どうもありがとうございました! また何かありましたら、よろしくお願いします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問