2012-03-05 3 views
2

Я получил эту форму:Как предотвратить отправку формы с помощью jQuery?

<form action='/Admin/Update' method='post'> 
    <input type='text' name='dataUpdate' value=" + $temp + " /> 
    <input type='submit' value='Update'/> 
</form> 

и это JQuery:

$("form[action$='Update']").submit(function() { 
    $.post($(this).attr("action") , $(this).serialize()); 
    return false; 
}); 

Форма представляет itself..and Я хочу, чтобы вызов Ajax вместо этого.

Что я делаю неправильно ...

Если некоторые из вас знают mvc3 вы могли бы сказать мне, если это будет вызывать мое действие?

[HttpPost] 
public ActionResult Update(string data) 
{ 
    string data2 = data; 
    return View(_gMenus.GetMyMenus()); 
} 

Или это не способ передачи переменных с JQuery этому методу

UPDATE:

даже если я сделать this..there еще постбэк:

$("#submit_btn").click(function() { 

    return false; 
}); 

Может быть, мне следует использовать метод live()?

+0

Все код выглядит хорошо для меня - убедиться, что это не другая ошибка в консоли браузеров, не позволяя вызов AJAX стрелять. .. – xandercoded

+1

Код выглядит нормально. Попробуйте отладить эту функцию и проверьте, запущено ли событие отправки. Если нет, это означает, что селектор не подходит, и, возможно, вам следует использовать идентификатор –

ответ

7

Попробуйте использовать event.preventDefault(), которые останавливают действие браузера.

$("form[action$='Update']").submit(function (event) { 
    event.preventDefault(); 
    $.post($(this).attr("action") , $(this).serialize()); 
    return false; 
}); 

В качестве альтернативы, вы можете изменить кнопку отправки на простой кнопки, как показано ниже,

<input type='button' id="submit_btn" value='Update'/> 

и изменить представить обработчик нажмите обработчик, как показано ниже,

$(document).ready (function() { 
    $("#submit_btn").on ('click', function() {  
    $.post($(this).attr("action") , $(this).serialize()); 
    return false; 
    }); 
}); 

Edit: Вы должны использовать .on в синтаксисе ниже для динамических элементов, (для jQuery v1.7)

$(document).ready (function() { 
    $(document).on ("click", "#submit_btn", function() {  
    $.post($(this).attr("action") , $(this).serialize()); 
    return false; 
    }); 
}); 

Использование .live для более старых версий,

$(document).ready (function() { 
    $("submit_btn").live ("click", function() {  
    $.post($(this).attr("action") , $(this).serialize()); 
    return false; 
    }); 
}); 
+0

'return false' должно быть всем, что необходимо ... – xandercoded

+0

dammit ... он по-прежнему делает обратную передачу – BlackFire27

+0

Посмотрите на обновление .. it doesnt work..I думаю, что я должен использовать метод live() – BlackFire27

1

Если вы используете MVC 3, то такого рода вещи уже встроены.

Ваша форма будет

@using(Ajax.BeginForm()){ 
    // fields/inputs/submit button 
} 

Затем укажите относительные файлы Javascript.

<script src="/js/libs/jquery.validate.min.js"></script> 
<script src="/js/libs/jquery.unobtrusive-ajax.min.js"></script> 
<script src="/js/libs/jquery.validate.unobtrusive.min.js"></script> 

Это сделает то, что вам нужно. Посмотрите на Ajax.BeginForm для различных AjaxOptions, которые вы можете использовать.

Также проверьте; MVC 3 - Ajax.BeginForm does a full post back

+0

Проблема, что я сажу все динамически с помощью jquery..so я вставляю форму с jquery..I не думаю, что jquery может разобрать Razor ... lol .. Хорошее альтернативное решение, хотя – BlackFire27

0

(Отправлено от имени ОП).

Я понял это, он работает сейчас:

$("#submit_btn").live('click', function() { 
    alert("succeeded"); 
    $.post($(this).attr("action"), { data: $('dataUpdate').val() }); 
    return false; 
}); 
Смежные вопросы