2013-02-21 3 views
2

У меня есть две формы на моей странице, которые очень похожи.HTMLInputElement не имеет метода 'parent'

Я делаю простую проверку в jquery, чтобы проверить, что каждое поле имеет значение перед использованием ajax для отправки данных обработчику php, который использует данные.

Из-за сходства между формами, я не могу знать, какая форма была отправлена, так что я думал, что я стараюсь дифференцировать с помощью идентификатора на форму контейнера DIV

<div name="contactform2" class="form"> 
    <div width="100%" class="con2"> 

     <div class="lable"> 
      <label for="first_name">First Name *</label> 
     </div> 
     <input type="text" name="first_name" class="span4"> 

     <div class="lable"> 
      <label for="email">Email Address *</label> 
     </div> 
     <input type="text" name="email" class="span4"> 

     <div class="lable"> 
      <label for="telephone">Contact Number *</label> 
     </div> 
     <input type="text" name="telephone" class="span4"> 

     <div class="lable"> 
      <label for="comments">Message *</label> 
     </div> 
     <textarea name="comments" rows="8" class="span4"></textarea> 

     <input type="submit" value="Submit" class="btn btn-success"> 
    </div> 
</div> 

Единственное отличие между формами, действительно, состоит в том, что в нем есть <select>, а другой нет.

Моего JQuery выглядит следующим образом:

$('input[type=submit]').click(function() { 
    var parentname = this.parent('div').attr('name'); 
    console.log('Form used: ' + parentname); 

    var fname = 0, 
     email = 0, 
     tel = 0; 
     comm = 0; 

    // Validate data 
}); 

Я думаю, может быть, я получил мой селектор здесь не так, как я обычно выбираю по ид/классу/тэг, так что я даже не уверен, что это действует.

Может ли кто-нибудь предложить альтернативу?

+0

Даже если вы переключите 'this' на' $ (this) ', вы не получите нужный результат, потому что родительский' div' кнопки отправки не имеет атрибута имени. Атрибуты имени не предназначены для использования в 'div', они предназначены для форм и элементов ввода. Говоря об этом, ваша форма должна быть обернута элементом '

'. Затем вы можете использовать '$ (this) .closest ('form'). Attr ('name')' - что намного более идеально. – ahren

+0

@ahren, true. Специально потому, что мы не можем видеть, где находится элемент ''. Он использует 'div' с именем класса' form', который не совпадает с – Alexander

ответ

8

.parent() - функция jQuery, вы забыли обернуть this в $().

var parentname = $(this).parent('div').attr('name'); 
console.log('Form used: ' + parentname); 

Вместо этого вы должны взглянуть на .closest().

+0

@AspiringAqib, да. Я могу перефразировать его как «метод», если вы предпочитаете :) – Alexander

+0

HAHAHAHA Я так сильно дернулся. Я подумал, что что-то получилось неправильным, когда «это» не выделено курсивом и не смело, как должно быть, когда все сделано правильно. Спасибо :) – Ortund

+0

@Alexander его метод поиска перемещения, который имеет выражение в качестве аргументов –

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