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

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

ただいまの
回答率

87.95%

jquery undefinedを表示させないようにしたい。

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,127

score 15

 前提・実現したいこと

jquery初心者です。

undefindの表記を表示させないようにしたいのですが、うまく非表示にすることが来ません。イメージ説明
どなたかアドバイスを頂けないでしょうか?

また、この書き方の場合、もっとこう書いたほうがいいなどあれば、ぜひよろしくおねがいします。

jqueryを使って投稿の印刷機能を作ろうとしています。
ボタン一つでポストのようなものを印刷できるようにしています。
印刷ボタンを押すとモーダルが出てきて、ラジオボタンでフレームを選択、選択したフレームにtextを配置し印刷するようにしています。

 該当のソースコード

$(function() {
  $('.print').on('click', function () {
    var one      = $('table td')[1];
    var two      = $('table td')[3];
    var three    = $('table td')[5];
    var four     = $('table td')[7];
    var five     = $('table td')[9];
    var six      = $('table td')[11];
    var text1    = document.getElementById("content");
    var image    = document.getElementById('image');
    var htmldoc  = document.body.innerHTML;

    $('button').click(function () {
      var radio = $('input[name="radio"]:checked').val();
      if (radio === 'frameone') {
        frm = '<%= image_tag "00.png", style:"width: 100%;" %>';
      } else if (radio === 'frametwo') {
        frm = '<%= image_tag "01.png", style:"width: 100%;"%>';
      };

      var text2 = "<div class='tdtop'>" + one + "</div>" +
      "<div class='tdcell'>" + two + "</div>" +
      "<div class='tdcell'>" + three + "</div>" +
      "<div class='tdcell'>" + four + "</div>" +
      "<div class='tdcell'>" + five + "</div>" +
      "<div class='tdcell'>" + six + "</div>";

      if ( text2 == 'undefined' ){
        text2 == "";
      };

    window.document.body.innerHTML =
      "<div>"  + frm +
      text1.innerHTML + "</strong>" +
      "<div>"  + image.innerHTML + "</div>" +
      text2.innerHTML +
      "</div>";
    window.print();
    document.body.innerHTML = htmldoc;
    location.reload();
    });
  });
});

 試したこと

ググってみて、if文で分岐して空の要素(””)を入れるなど試したところ、うまくいきませんでした。

 補足情報

jquery 1.12.4
Rails 5.1.4
Ruby 2.4.2

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2018/10/18 17:54

    回答が付いた質問の編集は慎重に行ってください。質問文のコードについて回答にて指摘があった場合は「追記」し、元のコードを編集する場合も「直したこと」がわかるようにしてください。

    キャンセル

回答 3

checkベストアンサー

+2

textはundefに限らずnullも除外したいですよね。
以下の書き方がスマートかなと。

text = text || "";


textをbooleanにしたときにtrueならそのままtextを使うし、falseなら ""を使うようになります。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/10/19 12:31

    非表示にできました!ありがとうございます!

    キャンセル

+1

text2って文字列じゃないですか?
文字を出力したいならinnerHTMLいらない気がします。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/10/19 12:31

    アドバイスありがとうございます!

    キャンセル

0

下記部分、nameからtechniqまで、定義していない変数があるのが問題なのでは?

      var text2 = "<div class='tdtop'>" + name + "</div>" +
      "<div class='tdcell'>" + date + "</div>" +
      "<div class='tdcell'>" + type + "</div>" +
      "<div class='tdcell'>" + size + "</div>" +
      "<div class='tdcell'>" + place + "</div>" +
      "<div class='tdcell'>" + techniq + "</div>";


あと、上記でtext2 に代入していながら text と比較しているのも変です。(どちらにせよこれでは比較できませんが)

      if ( text == 'undefined' ){
        text == "";
      };

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/10/18 17:44

    回答ありがとうございます!
    codeの書き換えを間違えていたため、書き直しました!
    ご指摘ありがとうございます。

    キャンセル

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

  • ただいまの回答率 87.95%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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