カテゴリー : JavaScript

[JavaScript] document.write() が動かない

JavaScript で、document.write() が動かないことがあって、色々と調べたメモ。

メモ: javascriptのdocument.write()がうまく動かない

読み込みのタイミングによっては外部 script のdocument.writeは無視される – はこべブログ ♨

外部 script の読み込みのタイミングによってはdocument.writeが無視される場合がある

Fenrir's BLog: Ajaxでdocument.writeするJavaScriptへの対策

document.write()の実行タイミングをずらす方法

JavaScript TUEEEEEEEってなるdocument.writeのテクニック – あさdev

[JavaScript] XMLHttpRequest で ajax GET

JavaScript にて、XMLHttpRequest で ajax GET する方法をメモ。

jQuery.ajax() が使えればカンタンに実装できるのですが、JavaScript縛りのときは下記のように書く必要があります。

var makeXMLHttpRequest = function(url) {
  var httpRequest;
 
  if (window.XMLHttpRequest) {
    // Mozilla, Safari, Chrome, ...
    httpRequest = new XMLHttpRequest();
    if (httpRequest.overrideMimeType) {
      httpRequest.overrideMimeType('text/xml');
    }
  } else if (window.ActiveXObject) {
    // IE
    try {
      httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
      }
    }
  }
 
  if (!httpRequest) {
    // console.log('Cannot create XMLHTTP instance');
    return false;
  }
 
  httpRequest.onreadystatechange = function() {
    processResponse(httpRequest);
  };
  httpRequest.open('GET', url, true);
  httpRequest.send('');
};
 
var processResponse = function(httpRequest) {
  if (httpRequest.readyState == 4) {
    if (httpRequest.status == 200) {
      doSomething(httpRequest);
    } else {
      // error
    }
  }
};

以上です。


参考情報

Getting Started – AJAX | MDN

XMLHttpRequest の使い方 – WebOS Goodies

[JavaScript] form内にname=”submit”という要素があるとsubmit()が動かない

JavaScript で、form内にname=”submit”という要素があると .submit() が動かないらしいです。

そんなわけで、jQueryで下記のように書いたら Property ‘submit’ of object # is not a function というエラーが出ました。

<form id="js-form" method="POST" action="/create">
  <input type="text" name="sample" />
  <input id="#js-submit-btn" type="submit" name="submit" value="保存" />
</form>
 
<script type='text/javascript'>
  $('#js-submit-btn').click(function(){
    $(this).attr('disabled', true);
    $('#js-form').submit();
  });
</script>

formタグの中に submit という name の要素を置くと、そちらを参照してしまうようです。

なので、

<input id="#js-submit-btn" type="submit" name="submit" value="保存" />

<input id="#js-submit-btn" type="submit" name="save" value="保存" />

というように修正すればOKです。


参考情報

javascriptでsubmitできない? | dTblog | デザインとプログラムの境界をさまようブログ

[jQuery]form.submit()できない原因 | HappyQuality

javascript – Property 'submit' of object #<HTMLFormElement> is not a function – Stack Overflow

[jQuery] $.ajax GET をキャッシュさせない設定方法

jQuery で ajax GET をキャッシュさせない設定方法をメモ。

IE はデフォルトで ajax GET は cahce : true らしく、2回目以降サーバーへリクエストを送りません。

なので、明示的に cache : false してあげるといいです。

$.ajax({
  type: 'GET',
  dataType: 'json',
  url : "http://example.com/",
  cache : false,
  ...
});

また、常にキャッシュを無効にする方法もあります。

$.ajaxSetup で cache : false を設定するコードをJavaScriptの共通処理に加えておけば、ajax GET はデフォルトで cache : false で処理してくれます。

$(function() {
  $.ajaxSetup({
    cache: false
  });
});

IE11 で ajax GET の結果がキャッシュされてて正常に動かなくて苦しみました・・・


参考情報

jQuery Ajax ajaxSetup() Method

ajax – Stop jQuery .load response from being cached – Stack Overflow

jQuery.ajax でリクエストをキャッシュさせない方法 – 葉っぱ日記

[jQuery] slideDown() のアニメーションが動かないときの解決方法

jQuery の slideDown() のアニメーションが動かないときの解決方法をご紹介します。

普通に使う分には問題ないのですが、divを入れ子にしたような構造で使う場合に slideDown() を呼び出してもアニメーションが動かず、show() を呼んだときのようなパッと表示されてしまいました。

以下に、アニメーションが動かなかったときのHTMLと、解決したJavaScriptのコードを記載します。

.show().slideDown() のメソッドチェーンで解決する

// 一旦、内部elementを非表示にする
$('#content-inner').hide();
 
// 外側のelementを表示してから slideDown()
$('#content-outer').show().slideDown();
 
// 最後に、内部のelementにも slideDown()
$('#content-inner').slideDown();

slideUp() は普通に使うだけ

$('#content-outer').slideUp();
$('#content-inner').slideUp();

参考情報

javascript – jQuery slideDown() animation not working – Stack Overflow

codeigniter – JQuery slidedown effect not working? – Stack Overflow

slideDown([speed], [callback]) – jQuery 日本語リファレンス

slideUp([speed], [callback]) – jQuery 日本語リファレンス