2009-08-27 2 views
2

Мой нижеприведенный код по-прежнему отправляет форму на специальный символ в поле имени. Валидация работает, но если я подаю повторно, она ломается и отправляет форму со специальными символами по имени.Форма JQuery отправляется даже при подтверждении возвращается false

В чем причина этого?

$("#fee").submit(function(){ 
    trimmedValue = $.trim($("#name").val()); 
    $("#name").val(trimmedValue); 
    typevalue = $("input:radio[@name='type']:radio:checked").val(); 
    if(typevalue=="FLAT" && !isFloat($("#amount").val())) { 
    alert("Amount should be number with proper decimal formatting"); 
    $("#amount").val("0.0"); 
    return false; 
} 
var noSpecialChars = /[^a-zA-Z0-9]/g; 
if (noSpecialChars.test($("#name").val())) { 
    alert("Please enter valid fee Name. Do not enter special characters" ); 
    return false; 
} 

if(typevalue=="PERCENTAGE" && !isFloat($("#percentage").val())) { 
    alert("percentage should be number with proper decimal formatting"); 
    $("#percentage").val("0.0"); 
    return false; 
} 
if(typevalue=="FLAT" && $("#amount").val()=="0.0") { 
    return confirm("Do you really want the amount to be 0.0 ?"); 
} 
if(typevalue=="PERCENTAGE" && $("#percentage").val()=="0.0") { 
    return confirm("Do you really want the percentage to be 0.0 ?"); 
} 

});

ответ

3

В каких браузерах вы можете воспроизвести это?

Я сделал это на Firefox 3.5.2, но не смог воспроизвести его на IE 6.0. После изучения некоторых более того, я заметил, что в этой линии ...

if (noSpecialChars.test($("#name").val())) { 

... вызов .test() возвращал true, затем false, в шахматном порядке (в Firefox только), что предполагает некоторые проблемы с RegExp. Поэтому я попытался заменить неявное создание RegExp следующим образом:

//var noSpecialChars = /[^a-zA-Z0-9]/g;   
    var noSpecialChars = new RegExp("[^a-zA-Z0-9]"); 

И это исправило проблему для меня.

+0

благодаря этому исправлена ​​проблема. Хотелось бы узнать, как отлаживать в этих сценариях. –

+0

Нет проблем - в этом случае я отлаживал его довольно низкотехнологичным способом, добавляя на страницу элемент textarea и записывая результат noSpecialChars.test ($ («# name»). Val()) в эту текстовую область , Я также использовал Firebug для того, чтобы сэкономить некоторые ранние гипотезы. –

0

Похоже, что переводчик никогда не достигает return false; при повторном нажатии и вместо этого отправляет форму в href, указанный для формы.

Если у вас есть href в вашем теге формы, попробуйте удалить его и вставить свойство непосредственно перед вызовом return.

+0

У меня нет атрибута href для формы. Я добавил действие, а также атрибут метода. –

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