絞り込み検索でチェックしているものを別枠に即表示させたい
-
【js】フォームの内容を特定の要素に即反映
ここで紹介されているように、絞り込み検索のチェックボックスで選択されたり、フリーテキストで入力されたものを指定のエリアに選択中項目として表示させたいです。サンプルにある方法のjQueryのはうまく動かなかったので、「普通のjsの場合」というのを適用し、以下のように書きました。
[HTML 既存の絞り込み検索] <?php $s = $_GET['s']; $post_tag_language = $_GET['post_tag_language']; ?> <form method="get" id="searchform" action="<?php echo home_url( '/' ); ?>" class="kensaku"> <input type="hidden" name="post_type" value="house"> <p> <div class="search-box">【フリーワード】: <input class="search" type="text" value="<?php if (!empty($_GET['s'])) echo esc_attr($_GET['s']); ?>" name="s" id="s"> <button id="searchsubmit" class="btn-search"><img alt="検索" width="32" height="20" src="<?php echo get_template_directory_uri(); ?>/images/icon/icon-btn-search.png"></button> </div> </p> <ul id="search" class="accordion"> <?php $taxonomy_name = 'tax-language'; $taxonomys = get_terms($taxonomy_name); if(!is_wp_error($taxonomys) && count($taxonomys)): echo '<li class="switch'; if($post_tag_language) { echo' open';}//チェックがあればアコーディオン開く echo '">【対応言語】</li>'; echo '<li class="contentWrap">'; foreach($taxonomys as $taxonomy): if($post_tag_language){ $key_language = in_array($taxonomy->slug, $post_tag_language);} $tax_posts = get_posts(array('post_type' => get_post_type('house'), 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) ); if($tax_posts): ?> <label><input type="checkbox" name="post_tag_language[]" value="<?php echo $taxonomy->slug; ?>"<?php if($key_language){ echo ' checked'; } ?>><?php echo $taxonomy->name; ?></label><br> <?php endif; endforeach; echo '</li>'; endif; ?> </ul> <p><input type="submit" value="検索" /></p> </form> ※実際の検索項目はもっとありますが、一部抜粋です。 === [HTML 選択中項目出力先] <div id="sOutput"> 【出力欄】 <br /> テキスト:<span id="OutputText"></span> <br /> 言語:<span id="Output_lang"></span> </div> === [search_output.js 書き換えたもの] window.onload = function () { getValue(); var $formObject = document.getElementById( "searchform" ); for( var $i = 0; $i < $formObject.length; $i++ ) { $formObject.elements[$i].onkeyup = function(){ getValue(); }; $formObject.elements[$i].onchange = function(){ getValue(); }; } }; function getValue() { var $formObject = document.getElementById( "searchform" ); //input[name=text] document.getElementById( "OutputText" ).innerHTML = $formObject.s.value; //input[name=checkbox] ※自力 document.getElementById( "Output_lang" ).innerHTML = ''; //いったん中身を削除 for(var $i = 0; $i<$formObject.post_tag_language.length;$i++) { //複数checkedされていることもあるので、forでまわす(まわさないと1番目のしか取れない) if($formObject.post_tag_language[$i].checked) { document.getElementById( "Output_lang" ).innerHTML += $formObject.post_tag_language[$i].value + ' '; } } }
しかしこのままではエラーを吐いて動作しません。
Chromeデベロッパー・ツールで確認すると下記のようなエラー内容でした。
—
Uncaught TypeError: Cannot read property ‘length’ of undefined
at getValue (search_output.js:21)
at window.onload (search_output.js:2)
—絞り込み検索のHTMLにあるinputタグの中身を
name=”post_tag_language[]”
から
name=”post_tag_language”
に書き換えれば選択中項目欄への出力はできたのですが、そうすると検索機能自体が動かなくなってしまいます。逆にjsファイルの中の
$formObject.post_tag_language[$i].
を
$formObject.post_tag_language[][$i].
のように書き換えると
search_output.js:21 Uncaught SyntaxError: Unexpected token ]
と別のエラーが出てjsが動きません。どこをどのように書き換えれば、検索機能を維持したまま、選択中項目を別枠表示することができますか?
- トピック「絞り込み検索でチェックしているものを別枠に即表示させたい」には新たに返信することはできません。