2013-10-13 3 views
2

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

Моя проблема заключается в следующем:

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

<html> 
<head> 
    <script type="text/javascript"> 
    function manipulateForm() { 
     document.forms["myForm"]["myField"].value = "new value"; 
     return true; 
    } 
    </script> 
</head> 
<body> 
    <form name="myForm" action="submit.htm" onsubmit="manipulateForm()"> 
    <input type="text" name="myField"> 
    <input type="submit" value="Submit"> 
    </form> 
</body> 
</html> 

Есть ли способ обойти это? Я хочу отправить управляемые значения форм, но без того, чтобы пользователи действительно видели, что данные формы были изменены.

Спасибо!

+1

Вы уверены, что этот код работает? Вы вызвали вашу форму 'myForm1', но ваш код ссылается на нее с помощью' myForm'. – ComFreek

+0

использовать скрытые поля для дополнительных параметров – lordkain

+0

@ComFreek Спасибо за подсказку, я отредактировал код. – user1159435

ответ

3

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

<div> 

    <form onsubmit="return manipulateForm()"> 
    <input type="text" id="myFieldFake"> 
    <input type="submit" value="Submit"> 
    </form> 

    <form id="myForm" action="javascript:alert('Replace with your form action')" style="display:none" > 
    <input hidden="true" type="text" id="myFieldReal"> 
    <input hidden="true" type="submit" value="Submit"> 
    </form> 

    </div> 

и для функции управления ...

function manipulateForm() { 

    var myFieldValue = document.getElementById("myFieldFake").value; 

// do something with myFieldValue... 

document.getElementById("myFieldReal").value = myFieldValue ; 

document.getElementById("myForm").submit() ; 

     return false ; 
    } 

jsFiddle

+1

Эй, спасибо! Это должно сработать. Можно также создать вторую/скрытую форму «на лету» в JavaScript. Это не очень элегантно, но если нет другого способа это сделать, я приму это решение позже сегодня. – user1159435

+0

без проблем .. im рад, что я мог бы помочь .. и спасибо за принятие моего ответа ...: D –

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