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

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

ただいまの
回答率

90.35%

  • JavaScript

    18626questions

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

  • CSS

    6692questions

    CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

  • HTML5

    4605questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

  • AngularJS

    587questions

    AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

複数選択可能なセレクトメニューのデータバインドの値の修正

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,587

sauzar18

score 2

前提・実現したいこと

セレクトメニューから下記の東京、その他関東地区を選択し、それらを
外した時、divの値が空になるのでこちらをもとの旅行地を選択を表示させたいです。

該当のソースコード

<ul>
    <li style="list-style: none">
        <div class="sel1" ng-bind="location">旅行地を選択</div>
        <select class="op1" multiple size="2" ng-model="location">
        <option value="" disabled>旅行地を選択</option>
        <option value="東京">東京</option>
        <option value="その他関東地区">その他関東地区</option>
        </select>
    </li>
<ul>
ul {
    position: relative;
    padding: 0;
    display: block;
    z-index: 1;
    vertical-align: top;
    margin: 0 0 10px;
}

li {
    position: relative;
}
.sel1{ 
    margin: 0 auto;
    margin-bottom: 20px;
    width:90%;
    display: block;
    overflow: hidden;
    text-overflow: ellipsis;
    font-size: 14px;
    white-space: nowrap;
    box-sizing: border-box;
    border: solid 1px #888888;
    border-radius: 5px;
    background-size: auto 30%;
    padding: 4px 25px 4px 5px;
    line-height: 20px;
    height: 30px;
    color: #3E3939;
}
.op1{
    -moz-appearance: none;
    -webkit-appearance: none;
    appearance: none;
    border-radius: 0;
    border: 0;
    margin: 0 5%;
    padding: 0;
    background: none transparent;
    vertical-align: middle;
    font-size: inherit;
    color: inherit;
    box-sizing: content-box;
    width: 90%;
    height: 30px;
    overflow: hidden;
    position: absolute;
    top: 0;
    opacity: 0;
}
<script>
angular.module('App', [])
  .controller('formController', ['$scope', function($scope) {
    $scope.location = '勤務地を選択';
  }]);
</script>

js

出来ればjqueryを使いたくないので、Angularでできるならそちらの方法も教えてほしいです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

0

>それらを外した時

とは具体的にどのような時なのでしょうか

以下のサンプルは複数選択して別の箇所をクリックしたときも$scope.locationの中身は失われていないように見えます.

リンク

上記リンク先を以下に変更しました。

<html>
 <head>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js"></script>  

  <script>
    angular.module('App', []).controller('formController', ['$scope', function($scope) {
      // 初期値はブランク
      $scope.location = '';

      // bindは条件で分岐
      $scope.selectedLocation = function(){
        return $scope.location === '' ? '旅行地を選択' : $scope.location;
      }

      // 選択状態解除
      $scope.clearLocation = function(){
        $scope.location = '';
      }

    }]);
  </script>
 </head>
 <body ng-app="App">
  <div ng-controller="formController">
    <div class="sel1" ng-bind="selectedLocation()"></div>
    <select class="op1" multiple size="2" ng-model="location">
      <option value="" disabled>旅行地を選択</option>
      <option value="東京">東京</option>
      <option value="その他関東地区">その他関東地区</option>
    </select>
    <button ng-click="clearLocation()">未選択</button>
  </div>
 </body>
</html>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/01 14:12

    選択を外したときでございます。データが空になります。

    キャンセル

  • 2016/11/01 19:12

    すみません、いまいち理解していないのですが
    ↑の「リンク」で「東京」と「その他関東地区」を選択すると画面上部に「東京,その他関東地区」と表示されて、そこからどこをクリックしたときに(選択を外した時)データが空になるのでしょうか。

    キャンセル

  • 2016/11/02 11:55

    <div></div>のなかにデータバインドされると思うのですが、初期値は<div>旅行地を選択</div>セレクトメニューから東京を選択したとき<div>東京</div>、「東京」と「その他関東地区」両方選択したとき<div>東京,その他関東地区</div>になると思うのですが、そのあとセレクトメニューの選択のチェックを「東京」と「その他関東地区」両方外した状態になると<div></div>の中になにも表示されていない状態になりますので、ここをもとの「旅行地を選択」に戻したいということです。

    キャンセル

  • 2016/11/02 12:51

    理解しました。
    上記内容を受けて回答に追記しました。

    キャンセル

0

ごめんなさい、スマートフォンを見落としていました・・・。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/28 15:52

    複数選択は出来ているのですが選択後〇件選択と表記されてしまうのでそちらを改善したいです。

    キャンセル

0

$('select')on('change', function(){
    var count = $(this).val().length;
    $('span').html(count+'件選択中');
});


span内に代入する前提で。
試してないですが・・


すみません、「"複数選択できます"」と出したいのですね・・勘違いしてました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

jquery.multiple.select.js
など利用してプレースホルダを表示してやるのはいかがでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/28 16:18

    スマートフォンでのセレクトメニューの拡大表示をのこしたまま表記を変えたいので恐らくmultiple.select.jsだとそちらが出来なくなると思います。

    キャンセル

  • 2016/10/28 16:22

    根本的なところに戻って恐縮ですが、そもそも、selectのmultiple機能は
    使い勝手がわるいので、ul-liでチェックボックスを並べて、表示領域を
    スクロールで処理するのがよいような気がします

    キャンセル

  • 2016/10/28 16:34

    そちらだとスマフォの場合、全画面に拡大されないため、selectで試行錯誤しております。

    キャンセル

同じタグがついた質問を見る

  • JavaScript

    18626questions

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

  • CSS

    6692questions

    CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

  • HTML5

    4605questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

  • AngularJS

    587questions

    AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。