установка цели _blank только для одной формы отправить действие

Я отправляю форму в свое приложение rails с двумя кнопками отправки. Они оба идут к одному и тому же действию controllerа и используют ту же форму, но при одном действии submit я хочу сделать форму target=_blank чтобы результаты представления формы открывались в новом окне.

Есть простой способ сделать это?

Выполнение этого действия для обоих действий:

  '_blank' do |f| %> 

Я обрушился с помощью jQuery, чтобы установить цель в форме onclick , но не повезло.

    На одной из кнопок добавьте class say popup . Затем добавьте jQuery следующим образом:

     $('.popup').click(function(e) { e.preventDefault(); //prevents the default submit action $(this).closest('form').attr('target', '_blank').submit(); }); 

    Демо: http://jsfiddle.net/HxrzD/

    Обратите внимание, что есть другие способы отправить форму, которую вам может потребоваться, f.ex enter ключ. Вам также может потребоваться сбросить целевой атрибут формы, если пользователь вернется в родительское окно и снова отправится с помощью другой кнопки. В этом случае вы можете либо просто очистить цель в конце:

     $(this).closest('form').attr('target', '_blank').submit().removeAttr('target'); 

    Или сохраните предыдущее состояние:

     var $form = $(this).closest('form'), target = $form.attr('target'); $form.attr('target', '_blank').submit().attr('target', target); 

    http://jsfiddle.net/HxrzD/2/

    вы можете перехватить клик на кнопку, прочитать ее данные и изменить форму перед отправкой:

    Итак, HTML:

     

    JS

     $('button.Submit').click( function() {   var t=$(this);   var form=t.parents('form');   form.attr('target',t.data('target'));   form.submit();   return false; }); 

    таким образом вы можете управлять целевым параметром в своей разметке html.

    http://jsfiddle.net/oceog/gArdk/

    в случае, если вы не очистите target формы, вы получите следующий сценарий:

    • пользователь нажимает на кнопку всплывающего windows,
    • представили форму,
    • закрытое окно,
    • нажмите на не всплывающее окно

    и это также выведет его в цель.

    поэтому в моем snipplet я очищаю цель в случае data-target = ”

    если вы хотите, чтобы пометить как всплывающее окно только один элемент, вам нужно будет клонировать вашу форму: http://jsfiddle.net/oceog/gArdk/2/

    JS:

     $('button.Submit.popup').click( function() {   var t=$(this);   var form=t.parents('form').clone(true).attr('target','_blank');     form.submit();   return false; }); 

    HTML:

     

    Чтобы обрабатывать все заявки (не просто клики), я бы сделал следующее:

     $("form").submit(function(e) { if($(e.srcElement).is(".popup")){ $(this).attr("target", "_blank"); } });