Отправка формы из функции JavaScript в Tapestry - PullRequest
2 голосов
/ 09 декабря 2010

Я пытаюсь отправить форму из функции JavaScript в Tapestry. Вот файл TML.

<!DOCTYPE html>
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:tx="tapestry-library:tapx">
<head>
    <script type="text/javascript">
        function bodyLoaded () {
          document.form1.submit();
        }
    </script>
</head>
<body onload="bodyLoaded()">
<form t:type="form" t:name="form1">
    <select t:type="select" t:id="reportType" t:model="literal:A, B"></select>
    <input t:type="submit" id="clientSubmit" value="Generate"/>
</form>
</body>
</html>

Но я получаю сообщение об ошибке ниже, а форма не отправляется.

document.form1 не определено эта ошибка] document.form1.submit ();

Итак, я посмотрел HTML-код, сгенерированный Tapestry. Имеет следующий тег:

    <form onsubmit="javascript:Tapestry.waitForPage(event);" 
  action="test.form" method="post" id="form" name="form">

Итак, я изменил document.form1.submit () на document.form.submit (), но проблема все равно не решена Что-то не так с моим кодом (или) не позволяет гибернации отправлять форму изнутри функций JavaScript?

Ответы [ 5 ]

1 голос
/ 04 января 2011

обновление до гобелена 5.2. это было известной проблемой в предыдущих версиях 5.x.

https://issues.apache.org/jira/browse/TAP5-947

0 голосов
/ 14 апреля 2011

Сегодня я обновил гобелен с 5.0.1.5 до 5.0.1.8, чтобы избавиться от надоедливой ошибки в AjaxFormLoop, и угадайте, с чем я столкнулся :) После почти 4 часов разочарования я попробовал что-то, что сработало.

Ошибка вызвана тем, что Tapestry автоматически добавляет метод javascript waitForPage (событие) к событию onSubmit формы (чтобы предотвратить отправку формы до загрузки страницы). Когда вы говорите document.getElementById('form1').submit(); или любую из его итераций, предложенных здесь в комментариях, кажется, что выдается это исключение из-за несоответствия в аргументах метода (я думаю). В любом случае, чтобы исправить это, просто измените строку на document.getElementById('form1').submit(this);

Это сработало для меня, и я надеюсь, что это решит и вашу проблему!

0 голосов
/ 09 декабря 2010

вместо document.form попробуйте document.forms[0]

0 голосов
/ 09 декабря 2010
Use id of the form

<form t:type="form" t:name="form1" t:id="form1">

document.form1.submit();
0 голосов
/ 09 декабря 2010
<form t:type="form" t:name="form1" t:id="form1">
    <select t:type="select" t:id="reportType" t:model="literal:A, B"></select>
    <input t:type="submit" id="clientSubmit" value="Generate"/>
</form>




<script type="text/javascript">
        function bodyLoaded () {
          document.getElementById('form1').submit();
        }
    </script>

Я только что добавил идентификатор в тег формы и одно изменение в сценарии Java.

Это может помочь вам.

...