JavaScript
0
どのような問題がありますか?

投稿日

window.confirm()で配列のデータを改行する

window.confirm()で配列を改行して表示することに躓いてしまったので、そのメモを残します。
やりたかったことは「警告メッセージは配列のデータを一列ではなく、改行して表示したい。」でした。

①うまく表示できなかった時

実行すると、何も加工していないので配列の形のまま表示されていました。(まあそうですよね。。。)
ちなみにwindow.confirm()は、onsubmitの部分でreturnで返す形にしないと「キャンセル」をクリックした場合でもサブミットしてしまうので注意です。

<画面>

image.png

<ソースコード>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
</head>
<body>
<form onsubmit="return checkWarnings()">
    <div>
        <label for="example">window.confirmの練習です。文字を入れて「送信」ボタンを押してください!→</label>
        <input id="example" type="text" name="text">
    </div>
    <div>
        <input type="submit" value="送信">
    </div>
</form>
<script>
function checkWarnings() {
    var warnings = ['実行しますか?', '本当に実行しますか?', '実行して後悔はないですか?'];
    if(!window.confirm(warnings)){
       return false;
    }
}
</script>
</body>
</html>

②うまく表示できたとき

改行コード「\r\n」をforEach文で回して詰め込むことによって解決できました。
「\r\n」はWindows環境での改行コードで、「\n」はLinux環境での改行コードらしいです。(詳しくはこのサイトを見ると良いと思います。https://www-creators.com/archives/2551)
今回はWindows環境で動作させるため「\r\n」を選んでいます。

<画面>

image.png

<ソースコード>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
</head>
<body>
<form onsubmit="return checkWarnings()">
    <div>
        <label for="example">window.confirmの練習です文字を入れて送信ボタンを押してください!→</label>
        <input id="example" type="text" name="text">
    </div>
    <div>
        <input type="submit" value="送信">
    </div>
</form>
<script>
function checkWarnings() {
    var warnings = ['実行しますか?', '本当に実行しますか?', '実行して後悔はないですか?'];
+    var formatWarnings = '';
+    warnings.forEach(function(element){
+        formatWarnings += element + '\r\n';
+    });
-    if(!window.confirm(warnings)){
+    if(!window.confirm(formatWarnings)){
       return false;
    }
}
</script>
</body>
</html>

改行コードをループで回すことがなく戸惑ってしまいましたが、また一つ勉強になりました。

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
na_210

コメント

「\r\n」はWindows環境での改行コードで、「\n」はLinux環境での改行コードらしいです。

今はWindowsも含め大抵のプラットフォームで\nを改行として扱えますので、改行コードを使い分けるのはかえってトラブルの元になる場合が多いです。

改行コード「\r\n」をforEach文で回して詰め込むことによって解決できました。

これくらいの量の配列であればループを回すよりjoinで結合してしまったほうが早いかと思います。

function checkWarnings() {
  const warnings = ['実行しますか?', '本当に実行しますか?', '実行して後悔はないですか?'];
  if(!window.confirm(warnings.join('\n'))){
    return false;
  }
}
0
どのような問題がありますか?
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
データに関する記事を書こう!
~
新人プログラマ応援 - みんなで新人を育てよう!
~
0
どのような問題がありますか?
ユーザー登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる
ユーザー登録ログイン
ストックするカテゴリー