Хитрый маленький селектор jquery один: зацикливание на всех входах и исключение только непроверенных переключателей - PullRequest
0 голосов
/ 08 февраля 2010

Вот в чем дело: чтобы создать правильный ряд параметров, я пытаюсь перебрать все входные данные, включенные в форму, построенную в ajax; Код здесь еще не закончен, но я думаю, вы поймете это:

$("#formulaireUploadFichier").live('submit',function(e){
    var fm = $(this);
    var fld = [];
    $('input',fm).not('[type=submit]').each(function(){
        if ($(this"[type=radio]:checked"||$(this).not("[type=radio]"))
        var name= $(this).attr("name");
        var val= $(this).val();
        fld.push(name+'='+val);
    });
    //construct url (note : should really be encoded!)...
    var url = fm.attr('action')+'?'+fld.join('&');
    //open shadowbox...
    Shadowbox.open({
        player:"html",
        content:url,
        width:800,
        height:800
    });
    //prevent form submission...
    e.preventDefault();
}); 

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

Ответы [ 5 ]

3 голосов
/ 08 февраля 2010

Поскольку вы уже находитесь в цикле своих элементов ввода, нет необходимости запускать другой. Просто проверьте подходящие фильтры для каждого элемента.

if($(this).is(":radio:checked,:not(:radio)")) {
        var name= $(this).attr("name");
        var val= $(this).val();
        fld.push(name+'='+val);
}

Функция jQuery's () позволяет сравнивать элемент с селектором, который вы передаете в качестве параметра.

0 голосов
/ 09 февраля 2010

Что именно вы хотите выбрать:

  • Только что отмеченные переключатели или
  • Все отмеченные переключатели и флажки?

Код для только что отмеченных переключателей:

if($(this).is(":radio:checked")) {

Код для всех проверенных входов (флажки и переключатели):

if($(this).is(":radio:checked, :not(:radio):checked")) {

Надеюсь, это то, что вы ищете.

0 голосов
/ 08 февраля 2010

Каковы ваши ожидаемые результаты здесь?

    $('input',fm).not('[type=submit]').each(function(){
    if ($(this"[type=radio]:checked"||$(this).not("[type=radio]"))
    var name= $(this).attr("name");
    var val= $(this).val();
    fld.push(name+'='+val);
     });

То, что я вижу здесь, это то, что, если проверено радио или нет, вы хотите, чтобы сработали следующие условия. Вы пропустили мысль {}, чтобы окружить код, все, что вы делаете, это устанавливаете имя переменной, когда вы соответствуете условию. Вы хотите, чтобы он запускал весь этот код? как это?

    $('input',fm).not('[type=submit]').each(function(){
if ($(this"[type=radio]:checked"||$(this).not("[type=radio]")){
var name= $(this).attr("name");
var val= $(this).val();
fld.push(name+'='+val);
}

 });
0 голосов
/ 08 февраля 2010

Я бы предложил заменить if ($(this"[type=radio]:checked"||$(this).not("[type=radio]")) на if($(this).attr('type') !== 'radio' || $(this).val()=='on')

0 голосов
/ 08 февраля 2010

Вы что-то напутали около $(this"[type

EDIT:

var inps=$('input');
var whatYouWant = inps.filter('[type!=radio]').add(inps.filter('[type=radio]:checked'));

таким образом он должен делать то, что хотел

...