2010-09-09 2 views
1

У меня есть форма с кнопкой отправки, и она работает нормально, но теперь у меня есть запрос пользователя, чтобы сохранить форму (чтобы сохранить действие), если ссылка на странице нажата, а форма «грязная».Как отправить форму с помощью jQuery?

У меня есть логика с использованием переменной isDirty JavaScript, теперь я хотел бы опубликовать форму из функции JavaScript, когда она грязная.

Моя форма декларации заключается в следующем:

<form id="formSmart" action="<%= ResolveUrl("~/SmartForm/Proceed") %>" 
      method="post" enctype="multipart/form-data"> 

и мой JavaScript является:

function checkLink() { 
    if (isDirty) { 
    $("#formSmart").submit(); 
    } 
} 

продолжить действие не дозвонились, но когда я нажимаю кнопку отправки на форме она работает отлично. Что я делаю неправильно в JavaScript?

Примечание: Вызов checkLink() работает нормально, конечной проблемой является то, что $ ("# formSmart"). Submit(); не отправляется в действие «Продолжить».

ответ

1

У вас есть правильный способ отправки формы на основе того, что вы опубликовали, и имена совпадают.

Вы действительно звоните checkLink и являются isDirty равными true?

Положить и alert('Test'); прямо перед отправкой и в поле if.

EDIT: Для подключения ваших события вам нужно сделать следующее:

$('#yourLinkID').click(checkLink(); return false;); 

Обратите внимание на return false, который заставит вашу ссылку не выполнить Navigate. Если вы хотите, чтобы ссылка перемещалась, вы можете просто удалить эту часть.

+0

Да, я добавил предупреждение(), и он выстрелил, никакой ошибки не было, но моя точка останова в действии контроллера не попадает. Когда я нажимаю кнопку «Отправить», точка останова попадает. –

+0

Но я всегда хочу, чтобы моя форма перемещалась, просто хочу выполнить submit (который сохраняет поля), но по какой-то причине мой пост контроллера не вызывается. –

+0

@Mark Kadlec вы можете проверить, что '$ (" # formSmart ")' не возвращает правильную форму? Что-то просто кажется странным, поскольку все выглядит так, как будто он должен работать ... может быть, это так просто, что мы все это игнорируем ... нужны свежие глаза :) – Kelsey

1

Похоже, что требование заключается в том, что «ссылка на страницу нажата».

Возможно, это мероприятие присоединяется ко всем тегам <a> на странице.

$(document).ready(function() { 
    // all <a> tags get the checkLink attached to them 
    $("a").click(checkLink()); 
}); 
+0

Я хотел бы вызовите функцию, если нажата гиперссылка, поэтому я открыт для вызова функции любым способом (либо как-то на закрытом событии, либо в onc лизать событие). –

+0

Я в основном пытаюсь устранить потерю данных из формы и принудительно отправить, если форма грязная –

1

Ваша проблема заключается в том, что браузер перемещается до того, как страница выполнит вашу отправку.
решение приостанавливает навигацию, пока вы не сохраните форму.

уродливое решение:
вы могли бы сделать это купить сохранение щелкнул URL в скрытом поле,
возвращение ложным, чтобы остановить навигацию,
и после того, как отправить чек на значение там, и если она существует сделать навигационная

лучшее решение:
опубликовать форму через AJAX и после завершения вызова Ajax (нет необходимости для проверки успешности или ошибки) выполнять навигацию (чтобы сделать его очень легко использовать только ajaxForm ajaxForm plugin)
Единственная проблема с этим решением заключается в том, что ссылка имеет target = "_ blank", потому что тогда вам нужно использовать окно.открытая, которые могут быть заблокированы всплывающие блокаторы
you can play with a simple jsbin sample i prepared showing this

этот пример опубликовать некоторые значения к более старой версии этой страницы + перейти к Google, откройте стельку и посмотрите, что первый пост, а затем перемещаться.

Если Вы зашли на jsbin страницу остановки чтения здесь
здесь является Html:

<form id="formSmart" action="http://jsbin.com/oletu4/edit" method="post"> 
<input type="text" name="someLie" /> 
<input type="text" name="someLie2" /> 
<input type="submit" value="submit" /> 
<a id="lnkNavOut" href="http://www.google.com">www.google.com</a> 

вот JS:

$(document).ready(function(){ 
    $("#lnkNavOut").click(function(){ 
    var jqFormSmart = $("#formSmart"); 
    //check here if the form is dirty and needs to be saved 
    var jqClickedLink = $(this); 
    $.ajax({ 
      url: jqFormSmart.attr("action"), 
      type: "POST", 
      data:jqFormSmart.serialize(), 
      complete:function(){ 
      location = jqClickedLink.attr("href"); 
      } 
     }); 
    return false;//stop navigation 
    }); 
});​ 
+0

Спасибо Ави, я очень ценю решение Ajax, выглядит довольно хорошо. –

Смежные вопросы