0

私はフォームを持っています:

<form accept-charset="UTF-8" action="/back/pages/22?locale=fr" class="form-horizontal page-form" enctype="multipart/form-data" id="edit_page_22" method="post" target="_blank"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓">
  <p><a href="#" id="no_window">Submit</a></p>
  <p><a href="#" id="new_window">Submit & _blank</a></p>
</form>

そしてスクリプトが添付されています:

  $(document).ready(function() {
    var page_form;
    page_form = {
      elem: $('form.page-form'),

      rand_action: function() {
        var action;
          action = this.elem.attr('action');
          return this.elem.attr('action', action + '&count=' + Math.random() * 1000);
      },
      submit_blank: function() {
        this.elem.attr('target', '_blank');
        $('<input>').attr({
          type: 'hidden',
          id: 'input_new_window',
          name: 'edit_redirect',
          value: 'true'
        }).appendTo(this.elem);
        return this.elem.submit();
      },
      submit: function() {
        this.elem.attr('target', '_self');
        $('#input_new_window').remove();
        return this.elem.submit();
      }
    };

    $("#new_window").click(function(event) {
      event.preventDefault();
      page_form.submit_blank();
      page_form.rand_action();
      return page_form.submit();
    });
    $("#no_window").click(function(event) {
      event.preventDefault();
      return page_form.submit();
    });
  }); 

FFではうまくいきますが、Chromeではうまくいきません。

4

1 に答える 1

0

これはデフォルトのブラウザーの動作に基づいています。新しいタブを開くように指定しない限り、chrome を使用してこれを行うことはできません。これは、window.open() メソッドを使用して実行できます。

デモを見る

$(document).ready(function() {
    var form;
    form = $('form.page-form');
    $("#submit_blank").click(function(event) {
      event.preventDefault();
      $('<input>').attr({
        type: 'hidden',
        id: 'input_new_window',
        name: 'edit_redirect',
        value: 'true'
      }).appendTo(form);
      form.submit();
      return window.open(window.location.href.replace(/form/, ''));
    });

    $("#no_window").click(function(event) {
      event.preventDefault();
      form.attr('target', '_self');
      return form.submit();
    });
  }); 

注: 現在実行中のブラウザーを取得するためのテストを追加して、予期しない動作を回避する必要があります。これは、ブラウザーごとにまったく異なる動作をするためです。

于 2013-01-06T13:36:03.017 に答える