: селектор ввода ничего не находит для формы

#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 within filter для достижения наилучшей производительности. Вы можете попробовать $("form *").filter(":input") по этой причине.

2. Я не читал этого раньше, спасибо за совет, кодзиро. (проголосовал)

3. Редактировать: удалено второе предложение по совету Кодзиро, а также потому, что я смог протестировать первое предложение, которое я сделал, и оно работает.