Jqueryで該当のフォームがあるかどうかを判断する。

Jqueryを使った判定処理(if文処理)は、動的な要素がある場合に威力を発揮します。
今回PHPでプログラム構築を行っていた際に、画面側に動的な要素が発生しました。

それは特定フォームがある場合、ない場合が発生するというものです。

ボタンを押したら、特定フォームに値を入れるという処理なのですが、特定フォームがない場合もある。
そんな時にどうすればいいの?

となってしまいました。

以前、JqueryでCSSの有り無しを判断するということをやりました。

CSSの有り・無しはis()関数で判断できました。
フォームの有り無しはどうやればできるのか?

ググって調べてみました。

やりたいこと

サンプルはこちらです。

ボタン01を押すと左の欄にメッセージが入ります。
ボタン02を押すと右の欄にメッセージが入ります。

これ自体は簡単な処理でできます。

やりたいことは、
ボタン02を押したときに、右の欄が無い場合は左の欄にメッセージを入れ、右の欄がある場合は右欄にメッセージをいれることを自動で判断する

です。

ソースはこちらです。

ただ普通に右欄を蓮してみたら、何も起こりませんでした。

サンプルはこちらです。

なにも考えずに右欄を外しましたが、当然何も起こりません。
ボタン02を押した際に、右欄に値を入れようとしますが、無いので何も起きませんでした。

ちなみにスクリプトエラーも発生しませんでした。
PHPと違い、存在しないエラーは起きないようです。

フォームが存在する・存在しないはどう判断すればよいのか?

cssの場合は、is()関数で判別できましたが、特定フォームが存在している・いないはどう判断すればよいのでしょうか?

調べてみたら、意外な方法で判断できることがわかりました。

それが「サイズ」です。

フォームが存在していない場合は、サイズが0以下になります。
そんな特性を利用して判断します。

論より証拠として、次のサンプルではフォームの有り無しが判断できています。

ソースはこちらです。

具体的に判定をしている部分

ソース全体を見るとわかりにくいですが、該当部分を抽出するとよくわかるようになります。
今回、フォームの存在を判定しているのは以下の記述です。

if ($(‘input[name=”input02″]’).length > 0)
{
}

length は、指定している要素のサイズを示しています。
この場合は <input name=”input02″> のサイズは0より大きいか?
と聞いています。

PHPだとこの概念はありませんが、Javascript、Jqueryだと存在するフォームにはサイズがあるという認識になります。

存在している場合はlengthが1以上になり、存在していない場合は0以下になります。

識別さえつけばあとは簡単です。
if文で切り分けします。

他のやり方についても調べました。

今回はlengthで判定しましたが、他の方法についても調べてみました。
すると、次の記述で同様の判断ができました。

is()関数

CSSでも使用した関数でできないかやってみたところ、次の記述で判断できました。

if ($(‘input[name=”input02″]’).is(“*”) == true)
{
}

is(“*”)(アスタリスク)は、必ずtrueになる条件です。
今回は、要素( input[name=”input02″] )が存在しているかどうかの判断であるため、存在していない場合にfalseになります。

get()関数

get()関数は、外部ファイルなどを取り出すための関数ですが、要素が存在する、存在しない判定にも使えます。

if ($(‘input[name=”input02″]’).get(0))
{
}

== true をつけると正しく判断されませんでした。
どうやら、存在しない要素でget()を実行するとエラーになる特性を利用した方法のようです。

size()はエラーになりました。

lengthが使えるなら、似たような関数にsize()があります。

試しに以下の記述でやってみたところ、「文法エラー」となりうまくいきませんでした。
どうやらinput要素ではsize()がうまく動作しないようでした。

if ($(‘input[name=”input02″]’).size())
{
}

今回はあくまでも例外的なケース

今回は定番処理に対し、例外処理を作っていた際に起こった事象でした。
そもそも設計の段階でinputフォームが存在する、存在しないが確定します。

動的にありなしになることは少ないです。

それでも、定番処理でも例外処理でもどちらにも使えるJquery処理を考えていったらこうなったという事例です。

処理を完全に分割できるならば、それに越したことはありません。
その都度最適な方法をとることができれば、それが最善だと思います。

今回のレポートは以上です。
読んでいただいてありがとうございました。


ホームページに関するお悩み事やご相談事がございましたら私どもまでご連絡ください。 鋭意ご対応申し上げます。
ホームページのご提案もさせていただいております