#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];
}
}
}