Как получить содержимое «этой» формы по имени?

#javascript #jquery

#javascript #jquery

Вопрос:

В следующем примере я получаю title из this формы, используя html id=title .

Как мне сделать то же самое, но вместо использования ID затем использовать name?

 $(document).ready(function(){

    $('form').live('submit', function(){

    var aform = $('form[name="create_form"]');

    // get the entire form
    var form = $(this);

    // get form title field by ID
    var title = this.elements.title.value;

    // get selected radio button using name instead if ID
    var type = $(this).find('input:radio[name="ctype"]:checked').val() || '';

    alert(title);
  

В случае переключателя оно передается по имени, но я не могу понять, как перевести этот синтаксис в обычное поле формы

 <input name="title" id="55544_title" type="text" />
  

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

1. это тот же синтаксис, JS работает в DOM независимо от того, какой тип элемента выбран, можете ли вы предоставить полный HTML / код формы?

2. разве вы не можете использовать: var title = $('input[name=title]',form).val();

3. Ваш вопрос кажется немного запутанным. Вы хотите получить значение «name» для каждого элемента формы, только для одного, или для самой формы?

4. Хммм, если я вас правильно понимаю, $('form[name="create_form"] input[name="title"]').val(); должно получиться

Ответ №1:

в этой строке

 // get form title field by ID
var title = this.elements.title.value
  

вы получаете его не с идентификатором, вы получаете его с атрибутом name, так что в некотором роде вы уже делаете это правильно

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

1. Переключатель имеет смысл только в том случае, если их несколько. Приведенное выше действие вернет коллекцию (NodeList) переключателей с тем же именем, попытка получить его свойство value вернет «undefined».

Ответ №2:

Почему вы не можете просто сделать:

 var title = $('input[name=title]',form).val();
  

вместо:

 var title = this.elements.title.value
  

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

1. Когда я это делаю, я получаю form is not defined .

2. что, ваше определение form выше: var form = $(this);

3. Ups. Извините. Я прокомментировал это.

Ответ №3:

 $(this).find(":input[name='title']");
  

должно сработать

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

1. Когда я делаю это, alert() печатается [object Object] , а не значение, которое я ввел в поле формы

2. Я забыл добавить метод ‘.val()’. Извините

Ответ №4:

 >     // get form title field by ID
>     var title = this.elements.title.value;
  

Внутри прослушивателя this находится форма (поскольку прослушиватель прикреплен к форме). Если существует более одного элемента с именем ‘title’, то:

 this.elements.title
  

будет коллекция. Это тот объект, к свойству которого вы пытаетесь получить доступ к значению. Если вы хотите ссылку на переключатель в коллекции, которая отмечена, то:

 $(this).find('input:radio[name="ctype"]:checked')
  

вернет объект jQuery с вашим вводом в качестве единственного элемента, поэтому:

 var checkedButton = $(this).find('input:radio[name="ctype"]:checked')[0];
  

должно сработать (если оно выбрано). Или вы можете выполнить итерацию по элементам, возвращенным this.elements.title , чтобы найти выбранный:

 var checkedButton, buttons = this.elements.title;

if (buttons.tagName) {
  checkedButton = buttons;

} else {

  for (var i=0, iLen=buttons.length; i<iLen; i  ) {

    if (buttons[i].checked) {
      checkedButton = buttons[i];
    }
  }
}