2014-02-07 3 views
0

У меня есть функция jQuery ниже, которая вызывается, когда я нажимаю кнопку на своей странице. Эта кнопка должна сбросить форму и перезагрузить новую страницу.ошибка сброса формы через javascript или jquery

function Create(txt) { 
    if (txt="createUser") { 
     document.forms[0].reset(); 
     $('#myform').each(function() { 
      this.reset(); 
     }); 
     $('input[name=method]').val(txt); 
     document.forms[0].submit(); 
    } 
} 

Но по какой-то причине, он не идет к this.reset() на всех, и я вижу все значения формы в моем классе действий. Как мне это решить?

Ниже приведено описание кнопки.

<input type="button" value="Create" class="btn" onclick="Create('createUser');"> 

редактировать: Хорошо, ребята .. я знаю, как тип входного = «сброс» работает и у меня есть другая кнопка в моей странице делать то же самое .. У меня есть создать пользовательскую форму, где я могу найти и увидеть существующий детали пользователя или заполнить форму и создать нового пользователя. если я ищу пользователя и затем создаю для создания другого пользователя, он отправляет новый запрос на сервер и перезагружает страницу .. но в классе действий .. бит не был сброшен .. и я получаю все значения на странице. поэтому ..i хочу сбросить форму ... без использования кнопки сброса ...

Я выбрал ответ Джона .. сделал небольшую модификацию, а ниже - последняя функция, которую я использовал.

function Create(txt){ 
if (txt="createUser"){ 
var $form = $('#myform'); 
    $form.find(':input').not(':button,:submit, :reset, :hidden').val('').removeAttr('checked').removeAttr('selected'); // Clear all inputs 
    $form.find('input[name=method]').val(txt); 
    $form.submit(); 
} 
} 
+0

Можете ли вы показать остальную часть кода для своей формы? – talemyn

+0

Кроме того, несколько вещей, которые нужно исправить в вашем коде: 1) изменить 'if (txt =" createUser ") {' to 'if (txt ===" createUser ") {', чтобы он фактически выполнял сравнение (не присваивая значение переменной 'txt'), 2) Способ, которым вы бы назвали' .reset() 'с jQuery, -' $ ('# myform') [0] .reset(); '. , , a) вы используете селектор 'id', поэтому будет возвращен только один элемент (нет необходимости в' .each() ') и b)' .reset() '- это метод JS, а не метод jQuery, поэтому вам нужно запустить его на ссылке DOM ('$ ('# myform') [0]'), а не объект jQuery, и 3) для jQuery, 'this' нужно отформатировать как:' $ (this) ' , – talemyn

ответ

0

Как уже отмечалось, у вас есть =, где вы должны иметь == , но это означает, что оператор if всегда верен. Однако это не значит, что вы «видите все значения формы в моем классе действий».

Я думаю, проблема может заключаться в том, что вы неверно истолковываете то, что делает метод reset(). Он не очищает все входные значения; вместо этого он сбрасывает их до их первоначальных значений (т. е. значений в атрибутах «значение»).

Возможно, вы захотите очистить их самостоятельно, а не использовать метод reset().

function Create(txt) { 
    if (txt == 'createUser') { 
     var $form = $('#myform'); 

     // Clear form values 
     $form.find(':input:not(:button,:submit,:reset,:checkbox,:radio,:hidden)').val(''); 
     $form.find('input:checkbox,input:radio)').prop('checked', false); 

     $form.find('input[name=method]').val(txt); 
     $form.submit(); 
    } 
} 

Примечание: :input selector матчи все входные, текстовое поле, выберите и кнопки элементы.

Примечание. Кажется, что OP не хочет, чтобы скрытые входы были очищены, но не хотите, чтобы флажки и радиокнопки очищались.

+0

Я думаю, вы должны предоставить код для очистки и текстовых полей, если у OP есть некоторые из них в форме. –

+0

@PhilippeGioseffi - Селектор '': input'' также выбирает и текстовые поля. Возможно, вы подумали, что я просто «ввел». Я изменил свой ответ, хотя для использования '': input: not (: button) ', потому что селектор': input'' также подходит к кнопкам, и я не думаю, что OP хочет, чтобы те были очищены. –

+0

Точно, идеальный ответ. –

1

Вместо Java Script, вы можете иметь HTML-код,

<input type="reset" value="Reset"> 
0

Вы, кажется, установив переменную здесь -

if (txt="createUser"){... 

Изменить это -

if (txt == "createUser") {.. 

Таким образом, вы делаете сравнение, inste объявление установки переменной.

+1

Хотя он определенно нуждается в исправлении, 'if' будет оценивать присвоение как' true' и вводить код в блок 'if', так что это не то, что останавливает его форму от сброса. – talemyn

0

кнопка не имеет тип = «сброс», чтобы либо изменить его, чтобы сбросить или использовать

document.getElementById("myform").reset(); вместо

document.forms[0].reset(); 
$('#myform').each(function(){ 
      this.reset(); 
    }); 
0

Я хотел бы сделать так:

$(document).ready(function() { 
    $("#createUserButton").on("click", function() { 
     var form = $("#myForm")[0]; 
     form.reset(); 
     $("input[name=method]").val("CreateUser"); 
     form.submit(); 
    } 
}); 

и ваша кнопка становится:

<input type="button" value="Create" class="btn" id="createUserButton"> 

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

<input type="text" name="method" id="methodName" /> 

И тогда вы можете ссылаться на него по id, который быстрее, чем по имени, например:

$("#methodName").val("CreateUser"); 

Ваш код был неправ, в вашем случае, вы должны уже использовали == или === вместо просто = и ваша форма должна бы просто назвали reset методом. Нет необходимости перебирать идентификатор с помощью each, даже если идентификатор должен быть уникальным на странице HTML.

Вот работа fiddle, просто введите что-то в первый вход, чтобы увидеть, как это происходит.

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