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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Material Design Lite

Material Design Liteは、WebサイトへMaterial Designの見た目や操作性を取り入れるためのライブラリです。

jQuery

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

Q&A

解決済

2回答

2187閲覧

フォームのプレースホルダがうまく動かない

krat

総合スコア18

Material Design Lite

Material Design Liteは、WebサイトへMaterial Designの見た目や操作性を取り入れるためのライブラリです。

jQuery

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

0グッド

0クリップ

投稿2017/05/07 22:07

編集2017/05/08 03:05

###前提・実現したいこと
javascript、jQuery初心者です。

Material Design Liteを利用したサイトがあり、
そのフォームを修正しています。

生年月日の入力欄ではpickadate.jsを使用しているのですが、
入力の際、一度入力をキャンセルし空欄になったフォームのプレースホルダが
入力前の状態に戻ってくれません。

###現状のフォームの状態

現在の状態
▲現在の状態、プレースホルダに'is-dirty'クラスが適用された状態のままです。

この状態に戻って欲しい
▲フォーム空欄時、'is-dirty'クラスを削除しこの状態に戻って欲しい

###該当のソースコード

html

1<div class="mdl-textfield mdl-js-textfield 2 string optional customer_born_on mdl-textfield--floating-label mdl-cell mdl-cell--12-col"> 3<label class="string optional mdl-textfield__label" for="customer_born_on"> 4生年月日 5</label> 6<input data-toggle="datepicker" class="string optional mdl-textfield__input" 7 type="text" name="customer[born_on]" id="customer_born_on" /> 8</div>

js

1 var input_pickdate = $('[data-toggle="datepicker"]'); 2 $.each(input_pickdate,function(i,e){ 3 $(e).pickadate({ 4 format: 'yyyy-mm-dd', 5 formatSubmit: 'yyyy/mm/dd', 6 hiddenName: true, 7 onOpen: function(v) { 8 var picker_date = $(e).pickadate('picker'); 9 $(picker_date.$root[0]).parent().addClass('is-dirty is-focus') 10 }, 11 onSet: function(v){ 12 var picker_date = $(e).pickadate('picker'); 13 var is_dialog = $(picker_date.$root[0]).parents('.mdl-dialog__content').length > 0; 14 if(v.select && is_dialog){ 15 $(picker_date.$root[0]).parent().find('label').hide(); 16 }else{ 17 $(picker_date.$root[0]).parent().find('label').show() 18 } 19 }, 20 21 // 下記が追記したもの 22 onClose: function(v) { 23 var picker_date = $(e).pickadate('picker'); 24 if ($(this).val().match(/\S/g)){ 25 $(picker_date.$root[0]).parent().removeClass('is-dirty is-focus') 26 } 27 } 28 })

onCloseで、フォームの入力値が空欄の場合のみ'is-dirty'クラスを取り除けばいいのかと思ったのですが、
onCloseに挙動を追加するという認識でそもそも合っているのか、
合っているとして、クラス/要素の指定をどうしたらうまくいくのか教えていただけると幸いです。

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

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

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

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

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

kei344

2017/05/08 02:25

書かれている状況が再現するコード(HTML/CSS)を追記されたほうが回答を得やすいと思います。また、プラグイン/ライブラリは似た名前のものもあるため、取得した場所のURLを質問文に追記ください。(URLにはリンクを張ることができます)
krat

2017/05/08 03:06

確認したらそもそもプラグインの名前も間違えていました・・・。ご指摘ありがとうございます。
guest

回答2

0

ベストアンサー

解答欄に書かれている状況が手元で再現できませんが、たぶん下記のように $(e) を基準に要素を探す必要があるのでは?

JavaScript

1var date_value = $(e).siblings('input:hidden').val();

投稿2017/05/08 17:00

kei344

総合スコア69398

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

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

krat

2017/05/09 03:17

上記コードに修正して、うまく動作しました! かなり大雑把な質問だったのに、ご回答頂きありがとうございました! セレクタなどまだまだわからないことばかりなので、勉強します・・・!
guest

0

ほぼ解決しました。
セレクタの指定、if文の条件を修正したら動くようになりました。

javascript

1 onClose: function(v) { 2 var picker_date = $(e).pickadate('picker'); 3 var date_value = $('.picker').siblings('input:hidden').val(); 4 if ( date_value =="" ){ 5 $(picker_date.$root[0]).parent().removeClass('is-dirty') 6 } 7 }

ただ、日付入力が複数あるページだと、2つ目以降の欄ではうまく動作しませんでした。
他により良い条件指定があるとか、2つ目以降でうまく動作しない原因がわかる方がいらっしゃいましたら教えていただけると幸いです。

投稿2017/05/08 06:03

編集2017/05/08 06:05
krat

総合スコア18

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問