#jquery #forms #input #selector
#jquery #формы #ввод #селектор
Вопрос:
У меня есть img, который при нажатии указывает на форму с использованием пользовательского атрибута, и эта форма затем отправляет скрытые входные данные через .post
Вот код:
$("img.imgsubmit").live('click',function(){
var msg = $(this).attr('title');
var r=confirm(msg '?');
if (r==false){return false;}
var form = '#' $(this).attr('imgsubmit');
var url = $(form).attr('action');
var output = OutputName($(form).attr('output'));
$("#" output).html('<img src="images/ajax-loader.gif" alt="Working..." />');
// get post values
var data = {}; // define data object
$(':input',this).each(function(index){
alert(this); // NEVER HAPPENS
var key = $(this).attr('name');
var val = $(this).val();
data[key] = val;
});
// post
$.post(url,data, function(html) {
$("#" output).html(html).slideFadeShow("fast");
});
return false;
});
Итак, все в порядке, пока:
$(':input',form).each(function(index){
alert(this); // NEVER HAPPENS, so it's never finding all the inputs
var key = $(this).attr('name');
var val = $(this).val();
data[key] = val;
});
Я перепробовал все виды вещей с этой первой строкой:
$(':input',$(form)).each(function(index){
$(':input',form).each(function(index){
$(form ' :input').each(function(index){
Ничто из этого не заставляет его работать. По сути, он вообще не работает с объектом для выбора скрытых входных данных внутри элемента формы.
tl; dr все в порядке, за исключением: селектор ввода не работает при доступе к переменной формы.
Комментарии:
1. думаю, проблема может быть здесь: var form = ‘#’ $(this).attr(‘imgsubmit’); Вы уверены, что переменная form действительно захватывает форму. Попробуйте присвоить форме идентификатор и использовать что-то вроде: var form = $(‘form#myFormId’);
Ответ №1:
Просто удар в темноте, не видя вашей разметки, но $(«form:input») должен работать.
обратите внимание, что все это в кавычках
Комментарии:
1. Документы jQuery рекомендуют использовать
:input
withinfilter
для достижения наилучшей производительности. Вы можете попробовать$("form *").filter(":input")
по этой причине.2. Я не читал этого раньше, спасибо за совет, кодзиро. (проголосовал)
3. Редактировать: удалено второе предложение по совету Кодзиро, а также потому, что я смог протестировать первое предложение, которое я сделал, и оно работает.