Невозможно проверить форму, используя Javascript; Проблемы с перенаправлением PHP? - PullRequest
4 голосов
/ 04 июня 2010

Я написал простую форму для хобби друга;По сути, мы пытаемся угадать стартовый состав пары команд на Чемпионате мира по футболу 2010 года (только для ударов).

В любом случае, мне нужно проверить следующую форму.Все функции Javascript работают хорошо, потому что, если я просто вызываю их вне тега, все работает нормально.Теперь я хочу выполнить некоторую базовую проверку на стороне клиента (я знаю, это небезопасно, блабла, но это хобби, поэтому это не актуально), а затем передать форму на другую страницу, где PHP (в настоящее время используется сервер WAMP).2.0) скрипт соберет данные и сохранит их в базе данных.

Вот форма:

<form name ="formPT" id="formPT" action="" onsubmit="return ValidaTudo();" method="post">
<a><img src="icons/paises/portugal-flag-icon.png" alt="portugal" border="0" style="vertical-align:middle"> Portugal</a>
<table id="tabela_PT" cellspacing="0" summary="Equipa">
<thead>
<tr>
<th scope="col" abbr="Nome" class="nobg">Nome</th>
<th scope="col" abbr="Posicao">Posição</th>
<th scope="col" abbr="Escolha">Escolha</th>
<th scope="col" abbr="Anterior">Escolha Anterior</th>
</tr>
</thead>
<tbody>
<tr><td scope="row" abbr="Jogador" class="spec">Eduardo</td><td>Guarda-redes</td><td><select  name="escolhaPT"><option value="EF">EF</option><option value="SP">SP</option><option value="NU" selected="selected">NU</option></select> </td><td>NU</td></tr>
<tr><td scope="row" abbr="Jogador" class="spec">Beto</td><td>Guarda-redes</td><td><select  name="escolhaPT"><option value="EF">EF</option><option value="SP">SP</option><option value="NU" selected="selected">NU</option></select> </td><td>NU</td></tr>
<tr><td scope="row" abbr="Jogador" class="spec">Daniel Fernandes</td><td>Guarda-redes</td><td><select  name="escolhaPT"><option value="EF">EF</option><option value="SP">SP</option><option value="NU" selected="selected">NU</option></select> </td><td>NU</td></tr>
<tr><td scope="row" abbr="Jogador" class="spec">Paulo Ferreira</td><td>Defesa</td><td><select  name="escolhaPT"><option value="EF">EF</option><option value="SP">SP</option><option value="NU" selected="selected">NU</option></select> </td><td>NU</td></tr>
<tr><td scope="row" abbr="Jogador" class="spec">Miguel</td><td>Defesa</td><td><select  name="escolhaPT"><option value="EF">EF</option><option value="SP">SP</option><option value="NU" selected="selected">NU</option></select> </td><td>NU</td></tr>
<tr><td scope="row" abbr="Jogador" class="spec">Ricardo Carvalho</td><td>Defesa</td><td><select  name="escolhaPT"><option value="EF">EF</option><option value="SP">SP</option><option value="NU" selected="selected">NU</option></select> </td><td>NU</td></tr>
<tr><td scope="row" abbr="Jogador" class="spec">Bruno Alves</td><td>Defesa</td><td><select  name="escolhaPT"><option value="EF">EF</option><option value="SP">SP</option><option value="NU" selected="selected">NU</option></select> </td><td>NU</td></tr>
<tr><td scope="row" abbr="Jogador" class="spec">Ricardo Costa</td><td>Defesa</td><td><select  name="escolhaPT"><option value="EF">EF</option><option value="SP">SP</option><option value="NU" selected="selected">NU</option></select> </td><td>NU</td></tr>
<tr><td scope="row" abbr="Jogador" class="spec">Fabio Coentrao</td><td>Defesa</td><td><select  name="escolhaPT"><option value="EF">EF</option><option value="SP">SP</option><option value="NU" selected="selected">NU</option></select> </td><td>NU</td></tr>
<tr><td scope="row" abbr="Jogador" class="spec">Pepe</td><td>Médio</td><td><select  name="escolhaPT"><option value="EF">EF</option><option value="SP">SP</option><option value="NU" selected="selected">NU</option></select> </td><td>NU</td></tr>
</tbody>
</table>        
<input type='submit' value='Check Field' />
</form>

Теперь немного Javascript:

 function ValidaTudo()
{
    alert('debug: validating...')
    if(Valida('PT'))
    {
        alert('fine!');
        return true;
    }
    else
    {
        alert('useless validation message but wth');
        return false;
    }
}

Естьдругие функции javascript, конечно, но:

  • Я не получаю любое всплывающее предупреждение от этой функции javascript!
  • Страница, довольно просто, перенаправленак index.php, так что я предполагаю, что это проблема PHP / WAMP ... я перезагружал WAMP довольно пару раз, но пока не повезло.Я не перезагружал свой компьютер, хотя думаю, что должен.

Чего мне не хватает?Заранее спасибо, ребята!

PS: Да, форма вообще не отправляет данные ни на одну страницу;я знаю это;это не оказывает никакого влияния на странное поведение, я пробовал.

Редактировать: Вот остальные функции проверки.Они используются для проверки соблюдения пользователем определенных правил (например, выбор ровно 11 игроков; 1 вратарь; как минимум 3 защитника и т. Д.).Я передаю пару параметров, потому что в полной форме мы пытаемся угадать игроков 4 команд (Португалия, Испания, Бразилия и Аргентина) - следовательно, 4 формы, каждая с различным идентификатором (на основе идентификатора страны -> {PT, BR, AR, ES} Вот остальные функции (имейте в виду, что они работают вне формы) :

function Valida (textstring) 
{
    var error_msg = null; 

    if(!valida_11(textstring.toUpperCase()))
    {
        error_msg = 'Erro para a equipa ' + textstring.toUpperCase() + ': deve selecionar apenas 11 jogadores efectivos';
        alert(error_msg);
    }

    if (!valida_gk(textstring.toUpperCase()))
    {
        error_msg = 'Erro para a equipa ' + textstring.toUpperCase() + ': deve selecionar um e um só 1 guarda-redes efectivo';
        alert(error_msg);
    }

    if (!valida_def(textstring.toUpperCase()))
    {
        error_msg = 'Erro para a equipa ' + textstring.toUpperCase() + ': deve selecionar um mínino de 3 defesas efectivo';
        alert(error_msg);
    }

    if(error_msg == null)
        return true;
    else return false;
}

function valida_11(tbl)
{
    var ef = 0;
    var input_list = document.getElementsByName('escolha' + tbl);

    for(var i = 0; i < input_list.length; i++) 
    {
        var a = input_list[i].value;
        if(a == "EF")
            ef++;
    }

    if (ef == 11)
        return true;
    else return false;
}

function valida_gk(tbl)
{   
    var ef = 0;
    var gks = conta_gks(tbl);
    var input_list = document.getElementsByName('escolha' + tbl);

    for(var i = 0; i < gks; i++) 
    {
        var a = input_list[i].value;
        if(a == "EF")
            ef++;
    }

    if (ef == 1)
        return true;
    else return false;
}

function valida_def(tbl)
{
    var defs = conta_defs(tbl);
    var gks = conta_gks(tbl);

    var ef = 0;
    var input_list = document.getElementsByName('escolha' + tbl);

    for(var i = gks-1; i < gks + defs; i++) 
    {
        var a = input_list[i].value;
        if(a == "EF")
            ef++;
    }

    if (ef >= 3)
        return true;
    else return false;
}

function conta_defs(tbl)
{
    var defs = 0;
    var tabela = document.getElementById('tabela_' + tbl);

    for(var i = 1; i < tabela.getElementsByTagName("tr").length; i++)
    {
        var linha = tabela.getElementsByTagName("tr")[i];
        var celula = linha.getElementsByTagName("td")[1];

        if(celula.innerHTML == "Defesa")
            defs++;
    }

    return defs;
}


function conta_gks(tbl)
{
    var gk = 0;
    var tabela = document.getElementById('tabela_' + tbl);

    for(var i = 1; i < tabela.getElementsByTagName("tr").length; i++)
    {
        var linha = tabela.getElementsByTagName("tr")[i];
        var celula = linha.getElementsByTagName("td")[1];

        if(celula.innerHTML == "Guarda-redes")
            gk++;
    }

    return gk;
}

Редактировать 2: То же самое происходитв других браузерах, таких как IE 7. Редактировать 3: перезагрузить компьютер, но проблема остается ...: /

Хорошо, мне удалось вывести страницу в Интернет @: http://testing.freeoda.com/teste.html Подарите ей вращениеЗдесь я получаю ошибку 404, функция JS не вызывается ....

Ответы [ 2 ]

0 голосов
/ 04 июня 2010

Ну, это смущает ... Виноват. Я запутался, потому что я использую дрянную строку меню, созданную другим программистом, который забыл закрыть тег; все работало так, как предполагалось, потому что реальная форма, которую мы видим, была внутри другой. / Лицо ладони

Мои извинения всем вам, спасибо за ваше время и терпение.

0 голосов
/ 04 июня 2010

Форма Bacause обновляет страницу, даже если нет действия = "". Попробуйте вместо этого написать onsubmit="return ValidaTudo();" это: action="javascript:ValidaTudo();" )))

...