Неопределенный не является функцией: при создании формы Javascript

#javascript #jquery #forms

#javascript #jquery #формы

Вопрос:

Вот linker.js

 deps = ['jquery'];
define (deps, function($) {
          var linker = {
               'link' : function(ortholog,link) {
               $form = $.createElement("form");                   
               $form.setAttribute("method", "POST");                   
               $form.setAtrribute("action", link);
               $form.setAttribute("onsubmit" ,window.open(action ortholog));
               $('body').append($form);
               $form.setAttribute("target","_blank");
               $form[0].submit();
               }
              //return linker();
          }
          return linker;
   });
 

Я получаю неопределенную ошибку не является функцией после «form = $.createElement(«form»);»
Как я могу это решить?
(Это linker.js вызывается другим javascript в моем программном обеспечении.)

Комментарии:

1. Знак доллара чаще всего ассоциируется с jQuery в javascript, а переменные, начинающиеся со знака доллара, обычно обозначают объекты jQuery. Было бы странно видеть var $form = document.createElement('form') , но чаще видеть var $form = $('<form>') , как вы создаете элемент формы в jQuery. Имена переменных, начинающиеся со знака доллара, которые являются обычными значениями javascript, могут вводить в заблуждение.

Ответ №1:

Почему бы и нет…

 deps = ['jquery'];
define (deps, function($) {
    var linker = {
        'link' : function(ortholog,link) {
            $form = $('<form>');
            $form.attr({
                method: 'POST',
                action: link,
                target: '_blank'
            }).appendTo('body');

            $form.submit(function() {
                window.open(action ortholog);
            });

            $form.submit();
        }
        //return linker();
    }
    return linker;
});
 

Комментарии:

1. Делает ли действие $form.attr что-то с фактической ссылкой, которая передается ему? ссылка — это URL-адрес (полностью отличный от моего текущего URL-адреса), который я передал функции, но он превращается в объект внутри формы.attr?

Ответ №2:

jQuery не имеет $.createElement функции, но document выполняет:

 $form = document.createElement("form");                   
 

Кроме того, вы onsubmit не правы. window.open Немедленно будет выполнено. Вам нужно назначить функцию для свойства следующим образом:

 $form.onsubmit = function(){
    window.open(action ortholog)
};
 

Наконец, ваш submit() вызов использует $form[0] . Это проблема, потому $form что это элемент DOM, поэтому вы не должны использовать [0] суффикс.

 $form.submit();