2012-08-10 2 views
0

Не совсем уверен, как сказать это одному извините за неудобный заголовок. У меня есть этот скрипт, который проверяет расширения файлов, чтобы убедиться, что они .mp3s. Я просто преодолею, какой селектор использовать, чтобы захватить имя файла.jquery selector using (this) для элементов формы

Пример:

<form name="uploadsong1" action="" enctype="multipart/form-data" method="post" onsubmit="return ExtensionsOkay();"> 
<input name="song1" type="file" accept="*.mp3" /> 
etc.. 

И ExtensionsOkay первым выхватывает значение поля .... который я знаю, это проблема ...

var fieldvalue = $(this).$('input[type=file]').value; 

Проблема исходит из того, что у меня есть несколько формы с загрузками. Имена форм uploadsong1, uploadsong2 и т. Д.

Итак, по моим рассуждениям, мне нужно захватить «это», которое является именем формы, а затем входным файлом. (Имена ввода увеличиваются на 1, 2, 3 и т. Д., Например, на имена форм).

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

+1

Почему бы вам не взглянуть на все функции jquery, это весело поверить мне – UnLoCo

ответ

1

Если вы хотите сказать, что вы хотите назвать ту же функцию ExtensionsOkay() из нескольких форм, которые вы должны связать его с JQuery, а не в инлайн onsubmit="..." атрибута. (На самом деле вы должны избегать рядных атрибутов событий в целом.)

$("form").submit(ExtensionsOkay); 

Тогда, в функции this будет относиться к форме вопроса, так что вы используете его, чтобы получить значение полей в определенной форме, был представлен. Ниже приведены два различных способа выбора поле в this:

function ExensionsOkay(event) { 
    var fieldvalue = $(this).find('input[type=file]').val();  
    // or 
    var fieldvalue = $('input[type=file]', this).val(); 
    // and then if you want to prevent the form submitting: 
    event.preventDefault(); 
} 

Когда JQuery вызывает вашу функцию он будет передавать в качестве параметра объект события, связанный с событием представить (это не имеет значения, что вы называете параметр, но большинство людей используют event или e - если вам не нужно использовать объект события, вам не нужно объявлять параметр).

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

$("form").submit(function(e) { 
    var fieldvalue = $(this).find('input[type=file]').val(); 
    // etc 
    if (someCondition) 
     e.preventDefault(); 
}); 

Обратите внимание, что с $("form") вы будете получать все формы на странице. Чтобы выбрать только некоторые из них, укажите соответствующие классы и скажите $("form.classNameHere").

+0

Это сработало отлично!Мне пришлось прочесть это несколько раз, но теперь я полностью понимаю. На самом деле это довольно просто благодаря вашей компоновке! Благодаря! – PaulHanak

2

Попробуйте

var fieldvalue = $(this).find('input[type=file]').val(); 
+0

Хм я возлагал большие надежды на этот! Тем не менее, он отображается как fieldvalue «undefined» .... – PaulHanak

+0

Обновлено - в jQuery нет 'значения', просто' val() ' –

+0

Еще раз спасибо Zoltan за быстрый ответ. Тем не менее, все еще, похоже, проблема. Я все еще не знаю. Логично, но все это кажется правильным! Очень нечетно .... – PaulHanak

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