Как исправить проблему с действием формы в XHTML 1.0 Strict

У меня возникла проблема с проверкой моего кода на XHTML 1.0 Strict.

Я использовал валидатор w.3, чтобы проверить свою страницу. Это говорит мне

Строка 112, столбец 24: обязательный атрибут «действие» не указан

        <form id="orderform">

Приведенный выше атрибут требуется для элемента, который вы использовали, но пропустили. Например, в большинстве типов документов HTML и XHTML атрибут «type» требуется для элемента «script», а атрибут «alt» требуется для элемента «img».

Типичными значениями для type являются type="text/css" для и type="text/javascript" для script.

Я относительно новичок в XHMTL и CSS, и в настоящее время я также изучаю Javascript, я выполнил поиск в Google и нашел много людей, говорящих об использовании строки Javascript для исправления ошибки, но никто из они достаточно четкие. Есть ли здесь кто-нибудь, кто может дать четкое объяснение для меня?

Это мой код XHTML..

    <form id="orderform">
<div class="field">
    Name:
    <input type="text" id="name" name="name" value="" />
</div>
<div class="field">
    # of Home shirts:
    <input type="text" id="homeshirt" name="home" value="" onchange="updateOrder();" />
</div>
<div class="field">
    # of Away shirts:
    <input type="text" id="awayshirt" name="away" value="" onchange="updateOrder();" />
</div>
<div class="field">
    Date of collection:
    <input type="text" id="date" name="date" value="" />
</div>
<div class="field">
    Subtotal:
    <input type="text" id="subtotal" name="subtotal" value="" readonly="readonly" />
</div>
<div class="field">
    Tax:
    <input type="text" id="tax" name="tax" value="" readonly="readonly" />
</div>
<div class="field">
    Total:
    <input type="text" id="total" name="total" value="" readonly="readonly" />
</div>
<div id="button">
    <input type="button" class="button" value="Place Order" onclick="placeOrder(this.form);" />
</div>
</form>

и мой Javascript...

<script type="text/javascript">
        function updateOrder() {
            const TAXRATE = 0.0925;
            const SHIRTPRICE = 39.99;
            var numHomeShirt = parseInt(document.getElementById("homeshirt").value);
            var numAwayShirt = parseInt(document.getElementById("awayshirt").value);
            if (isNaN(numHomeShirt))
                numHomeShirt = 0;
            if (isNaN(numAwayShirt))
                numAwayShirt = 0;
            var subTotal = (numHomeShirt + numAwayShirt) * SHIRTPRICE;
            var tax = subTotal * TAXRATE;
            var total = subTotal + tax;
            document.getElementById("subtotal").value = "£" + subTotal.toFixed(2);
            document.getElementById("tax").value = "£" + tax.toFixed(2);
            document.getElementById("total").value = "£" + total.toFixed(2);
        }

        function placeOrder(form) {
            if (document.getElementById("name").value == "")
                alert("I'm sorry but you need to provide a name to print on the shirt.");

            else if (document.getElementById("date").value == "")
                alert ("I'm sorry but you must provide a date you can collect your shirt(s).");

        }
    </script>

Спасибо за уделенное время,

Ваше здоровье. Джейми


person Jamie 'Synyster' Byrne    schedule 07.12.2011    source источник
comment
Как насчет того, чтобы просто добавить пустое действие? <form id="orderform" action="">   -  person Shadow Wizard Wearing Mask V2    schedule 07.12.2011
comment
да. Добавление action="" сделает это. Также небольшое замечание. При запуске этого валидатора программа не выполняет никакого Javascript на вашем месте, поэтому обходной путь js для этого не сработает.   -  person OptimusCrime    schedule 07.12.2011
comment
Спасибо, ребята, пустое действие теперь позволило проверить мою страницу, большое спасибо.   -  person Jamie 'Synyster' Byrne    schedule 07.12.2011
comment
Если вы новичок в веб-разработке, вы можете остерегаться XHTML. потому что, с точки зрения почти 2012 года, это был в основном неудачный эксперимент. Конечно, не все так думают, поэтому вам следует провести собственное исследование.   -  person Pointy    schedule 07.12.2011


Ответы (4)


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

person Richard Dalton    schedule 07.12.2011

Нет необходимости в javascript. Если вы используете php, просто добавьте следующий код:

<form id="your_id" action="<?=$_SERVER['PHP_SELF']?>">

По сути, этот код установит действие на ту же страницу.

Или другие предлагают, просто добавьте пустое действие :)

person Savas Vedova    schedule 07.12.2011

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

<form id="orderform" action="">

Похоже, вы используете JavaScript для обработки отправки формы, поэтому вы должны просто оставить действие пустым, в противном случае присвойте ему значение, относящееся к php-скрипту отправки формы.

person mason81    schedule 07.12.2011

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

В настоящее время вы реализуете поведение только в Javascript - если это отключено, ничего не произойдет. В идеале вы должны указать скрипт, обычно тот же PHP-скрипт, который генерирует форму, для обработки нажатия кнопки отправки:

<form id="your_id" action="<?=$_SERVER['PHP_SELF']?>">

Затем ваш скрипт должен обработать отправку в случае, если Javascript этого не сделал.

person tarmes    schedule 07.12.2011