2014-12-08 5 views
1

Я не смог отправить форму через функцию javascript. У меня есть требование, когда пользователь нажимает на ссылку, мне нужно отправить форму. Ниже приведена ошибка, видимая на консоли браузера:Uncaught TypeError: Невозможно установить свойство «действие» неопределенного

Uncaught TypeError: Cannot set property 'action' of undefined 

Пожалуйста, предложите, как я могу отправить форму для вызова метода контроллера пружины.

Ниже Javascript функция:

function submitDataOnClick(){ 
    document.myForm.action = contextPath + "/dataProcess.htm"; 
    document.myForm.submit(); 
} 
<body> 
<form name="myForm"> 
//all form elements.. 
<table class="myClass"> 
    <tr><td><a href="" onclick="submitDataOnClick()"> </a></td></tr> 
</table> 
</form> 
</body> 

Спринг контроллер:

@RequestMapping(value = "/dataProcess", method = RequestMethod.GET) 
    public ModelAndView dataProcess(HttpServletRequest request, 
      HttpServletResponse response, 
      BindingResult beException) 
      throws IOException { 

//logic... 
    ModelAndView mav = new ModelAndView(); 
    mav.setViewName("home"); 
    return mav; 
} 
+2

Используйте 'id' и' getElementById() ', прямая ссылка Элементы через 'document' устарели десять лет назад. – Teemu

+0

Вы должны передать ссылку на myForm в своей функции. Или, как заявил первый комментатор, вы можете получить myForm с getElementById() –

+0

@Teemu Хотя он устарел, он все равно должен работать. Любая идея, почему он получает ошибку? – Barmar

ответ

2

В большинстве браузеров, которые должны работать при условии не имеют var myForm в глобальном масштабе в любом месте или что-то как это. Причина в том, что когда вы даете элементу form атрибут name, браузер создаст свойство на document, используя это имя, которое ссылается на form. Но если вы используете то же имя на чем-то другом, оно может конфликтовать с тем, которое вы думаете, что используете.

Три варианта для работы вокруг этого:

  1. Вы меченые свой вопрос jquery, но, кажется, не использовать JQuery в коде, так что не-JQuery вариант:

    Если вы хотите использовать ссылку для отправки формы, один вариант, чтобы дать форму id, а затем использовать это, чтобы посмотреть его:

    HTML:

    <form id="myForm" name="myForm"> 
    

    (удалить name=..., если она не нужен)

    JavaScript:

    function submitDataOnClick(){ 
        var form = document.getElementById("myForm"); 
        form.action = contextPath + "/dataProcess.htm"; 
        form.submit(); 
    } 
    
  2. Так как вы сделали тега jquery, вариант минимальных изменений JQuery:

    HTML:

    <tr><td><a href="" onclick="submitDataOnClick($(this).closest('form')[0])"> </a></td></tr> 
    

    JavaScript:

    function submitDataOnClick(form){ 
        form.action = contextPath + "/dataProcess.htm"; 
        form.submit(); 
    } 
    
  3. ... или решение увеличить-изменения: Избавиться от onclick по ссылке полностью и, возможно, добавить класс к этим ссылкам:

    <tr><td><a href="" class="submit-on-click"> </a></td></tr> 
    

    ...и поместить этот код в script элемента после формы (обычная рекомендация находится в самом низу, перед закрывающим тэгом </body>):

    $("form[name=myForm]").on("click", "a.submit-on-click", function() { 
        var form = $(this).closest('form')[0]; 
        form.action = contextPath + "/dataProcess.htm"; 
        form.submit(); 
    }); 
    
+0

Я все еще сталкиваюсь с проблемой, Uncaught TypeError: Не могу установить свойство «действие» null. Пожалуйста, найдите мой полный пример в http://jsfiddle.net/0w9yo8x6/37/. В любом случае в скрипке не было возможности увидеть вышеупомянутое исключение. @ T.J. Crowder. Пожалуйста, предложите, где я ошибаюсь. – user222

+0

@ user222: Ну, если вы не видите его в скрипке, то вам нужно посмотреть, что отличает скрипта от вашего кода. –

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