Кнопка отправки не работает в IE / Safari, работает в Chrome, но информация о форме не передается - PullRequest
1 голос
/ 24 января 2012

У меня есть настройка формы, но по какой-то причине JS для отправки формы работает в Chrome, но не в IE9 или Safari. Интересно, что в Chrome, где кнопка отправки не работает, никакая информация не передается.

Вот моя кнопка отправки -

<a href="javascript: validate(); return false;"><img type="submit" src="lib/send_feedback.jpg" border="0" class="feedback-submit-img" /></a>

Вот что JS называет

// Submit form to next page
function submitForm() {
    //   document.forms["feedbackform"].submit();
    document.feedbackform.submit();
}
// Submit form and validate email using RFC 2822 standard
function validateEmail(email) { 
    // Modified version original from: http://stackoverflow.com/a/46181/11236
    var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(email);
}
// Return true if email field is left unchanged
function originalText(email){
    var defaultMsg;
defaultMsg = "Enter your email address (optional)";
if(defaultMsg == email){
    return true;    
}
return false;
}
// Verify or decline with error message
function validate(){
    $("#result").text("");
    var email = $("#email").val();
    if ((validateEmail(email)) || originalText(email)) {
        submitForm();
    } else {
        $("#result").text(email + " is not a valid email.");
        $("#result").css("color", "red");
}
return false;
}
$("form").bind("submit", validate);

Для второй части моей проблемы, которая может или не может быть связана с проблемой JS, -

echo $POST['satisfaction'];
echo $POST['user_email'];
echo $POST['comments'];
if(isset($POST['user_email'])){
    echo 'true';
} else {
    echo 'false';
}

Если вы хотите лучше посмотреть на страницу, которую я редактирую вот ссылка на jsfiddle

редактировать

По запросу Марко я удалил ссылку вокруг кнопки отправки и поместил событие onClick на саму кнопку. Это решило проблему как в IE, так и в Safari. Теперь мой оставшийся вопрос / проблема заключается в том, почему данные POST не передаются правильно на следующую страницу.

Вот полный источник с запрошенным Джорджем. - index.php

Источник страницы передается - feedback-accept.php

Кроме того, как было сказано / опубликовано, на какой сайт StackOverflow предпочитают публиковать исходные тексты?

В ответ на комментарий Брайана, если я не смогу использовать сбой без возможного нарушения данных POST, что будет хорошей альтернативой / обходным путем?

Ответы [ 2 ]

3 голосов
/ 24 января 2012

попробуйте этот код:

JQuery:

$(document).ready(function()
{

    $('.validate').bind('submit click',function()
    {
        //Validate!

        //is email
        if( /..../.test( $(this).find('input[name=email]').val() ) )
        {
            alert('Error!!!');
            return false; //STOP PROPAGATION
        }

        //Its okay!
        //send form!
        $(this).parents('form').submit();

        //click event stop propagation
        return false;
    });

});

HTML:

<a href="" class="validate">Submit</a>

OR

<input type="submit" value="Submit" class="validate" />

OR

<button class="validate" >Submit</button>
1 голос
/ 24 января 2012

Вкратце, я бы сказал, что у вас здесь конфликт функций.Когда вы разрабатываете тип отправки, вы сообщаете браузеру, что он отправит вашу форму (о ее действии), с другой стороны, внутри ссылки, которая вызывает функцию JS.Если вы создаете отправку в своем JS, попробуйте не использовать тип отправки и посмотрите, работает ли он более корректно.Вы также можете попробовать заменить ссылку на простой «onSubmit» внутри тега формы и вызвать функцию JS оттуда.Таким образом, когда браузер определит, что пользователь нажал кнопку отправки, он вызовет функцию JS по вашему желанию, и если эта функция вернет true, браузер разрешит отправку.

...