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

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

ただいまの
回答率

89.99%

chromeで正しく動かないjavascript

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 2,859
退会済みユーザー

退会済みユーザー

下記のjavascriptが、chromeだと正常に作動しません。

具体的には、

■firefox
ボタンクリック➡正常に1回だけ変化する。

■chrome
ボタンクリック➡チカチカ変化し続けてしまう。

という状態です。

▼実際の動作
https://jsfiddle.net/rqmxk50c/7/

▼そのコード

<div class="area">
    <div class="animal">ねこ</div>
  <div class="btn">value挿入</div>
</div>

<div class="area">
    <div class="animal">いぬ</div>
  <div class="btn">value変化</div>
</div>

<input class='abc' type=radio value='挿入前' checked>
<div>value=<span id="output"></span></div>
(function($){

//ボタンの「親要素area」のanimalを、valueに挿入➡chromeだとおかしい
$(".btn").click(function(){
    var fuga = $(this).parent().find(".animal").get(0);
    setInterval(function(){
    document.querySelector("input[type=radio].abc").value = fuga.textContent;
    });

//現在valueを表示
var target = document.getElementsByClassName("abc")[0];
var output = document.getElementById("output");
    setInterval(function(){
    output.innerHTML = target.value;
    });

});

})(jQuery);


どなたか、原因をご指摘いただけませんでしょうか?
よろしくお願い致します。(>_<)

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • 退会済みユーザー

    2018/03/08 14:57

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 3

+6

原因をというかやりたいこととコードが一致していないと思います。

setIntervalって何かご存知でお使いですか?
何をやっているかわからないプログラムを適当に書いて
「思い通りに動く」可能性が何%くらいあるとお考えですか?

span内を入れ替えるだけならほとんどのコードが不要です。
「valueを入れ替える」など他にやりたいことがあるのならしっかり調べて
プログラムを記述してください。

(function($){

//ボタンの「親要素area」のanimalを、valueに挿入
$(".btn").click(function(){
    var fuga = $(this).parent().find(".animal").html();
    $("#output").html(fuga);
    //setInterval(function(){
    //document.querySelector("input[type=radio].abc").value = fuga.textContent;
    //});

//現在valueを表示
//var target = document.getElementsByClassName("abc")[0];
//var output = document.getElementById("output");
    //setInterval(function(){
    //output.innerHTML = target.value;
    //});

});

})(jQuery);

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/03/08 17:00

    >setIntervalって何かご存知でお使いですか?
    おっしゃるとおり、別のご回答から流用しておりました。

    >何をやっているかわからないプログラムを適当に書いて「思い通りに動く」可能性が何%くらいあるとお考えですか?
    だいたい100回やって全部しっぱいします。笑

    さて今回は一番早くご回答いただき、さらにsetIntervalの削除で解決したのですけれど、setIntervalについてもう一歩詳細にご説明してくださった方をベストアンサーにゆずってあげてください。

    迅速なご回答、どうもありがとうございます!

    キャンセル

checkベストアンサー

+5

わー、興味深いですね。

setInterval() メソッドは、一定の遅延間隔を置いて関数やコードスニペットを繰り返し呼び出します。
WindowOrWorkerGlobalScope.setInterval() - Web API インターフェイス | MDN

とありますから、Chromeの動作が正しいように思えます。

HTML Standardをざっと見てみましたが、なんと、timeout は必須の引数ではないのに、未定義の際の動作が記述されていないように見えました。(0以下の場合には0にする、となってる)実装に任されてるのかな……?

いずれにせよ、想定されている動作にはsetInterval()が不要のように思えます。setTimeout()を使ってはいかがですか?

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/03/08 16:57

    いつもありがとうございます。

    setInterval()が不要だというのは最初の方のご回答にあり、それを消したところ正常に作動しました。

    しかし、ではなぜ、ブラウザで違うのか。という疑問が残ります。Lhankor_Mhyさんのおかげで少し原因がわかった印象です。その意味で僭越ながらベストアンサーにさせて頂きました。

    いろいろ参考になるリンク先もありがとうございます。

    キャンセル

+4

setIntervalにどういう意図があるのかやはりちょっとわかりませんね
普通にデータをとってきて更新すればいいような気がします
そもそも一つしか要素のないラジオボタンへのこだわりもわからない

$(function(){
  $(".btn").on('click',function(){
    var fuga = $(this).prev(".animal").text();
    $("input[type=radio].abc").val(fuga);
    $("#output").text(fuga);
  });
});

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/03/08 16:55

    うう、いつもありがとうございます。yambejpさんのご回答はいつもソッコー解決で、ありがたすぎます。

    setIntervalはおっしゃる通り、以前のご回答から流用しただけでして、使い道がわかっておりませんでした。

    >そもそも一つしか要素のないラジオボタンへのこだわり
    えへへ、そうですよね。笑

    キャンセル

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

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