Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.11.2013, 11:41
rss rss вне форума
Новичок на форуме
Отправить личное сообщение для rss Посмотреть профиль Найти все сообщения от rss
 
Регистрация: 05.11.2013
Сообщений: 6

jquery select
Форма состоит из:
второй type меняет вывод полей поля
первый select deal, меняет type и то что поменялось type ом
другие выводимые

кто-нибудь помогите сократить код:

var result2;

function iter_in_required(elements, type) {
    var result = true;
    $(elements).each(function(){ // каждому элементу присвоить: // element ?
        if (type==0) {
            if ($(this).is('[type="text"]') && !$(this).val() ) {
                result = false; $(this).nextAll('.err').eq(0).css('display','inline');
            }
            else if ($(this).is('textarea') && !$(this).val() ) {
                result = false; $(this).nextAll('.err').eq(0).css('display','inline');
            }
            else if ( $(this).is('select') && !$('option:selected',this).val() ) {
                result = false; $(this).nextAll('.err').eq(0).css('display','inline');
            }
        }
        else {
            var deals = $('select[name="deal"] option:selected').val();
            if (deals=='prodazha') {
                if ( $(this).parent().hasClass('t'+type) &&  $(this).is('[type="text"]') && !$(this).val() ) {
                    result = false;
                    $(this).nextAll('.err').eq(0).css('display','inline');
                }
                else if ( $(this).parent().hasClass('t'+type) && $(this).is('textarea') && !$(this).val() ) {
                    result = false;
                    $(this).nextAll('.err').eq(0).css('display','inline');
                }
                else if ( $(this).parent().hasClass('t'+type) &&  $(this).is('select') && !$('option:selected',this).val() ) {
                    result = false;
                    $(this).nextAll('.err').eq(0).css('display','inline');
                }
                else if ( $(this).closest('div').hasClass('t'+type) && $(this).is('[type="checkbox"]') ) {
                    var name = $(this).attr('name');
                    result2 = false;
                    $('.param [name="'+name+'"]').each( function(){
                        if ( $(this).is(':checked') ) {result2 = true;}
                    } );
                    if (!result2) {
                        $(this).closest('ul').nextAll('.err').eq(0).css('display','inline');
                    }
                }
            } else {
                if ( $(this).parent().hasClass('a'+type) &&  $(this).is('[type="text"]') && !$(this).val() ) {
                    result = false;
                    $(this).nextAll('.err').eq(0).css('display','inline');
                }
                else if ( $(this).parent().hasClass('a'+type) && $(this).is('textarea') && !$(this).val() ) {
                    result = false;
                    $(this).nextAll('.err').eq(0).css('display','inline');
                }
                else if ( $(this).parent().hasClass('a'+type) &&  $(this).is('select') && !$('option:selected',this).val() ) {
                    result = false;
                    $(this).nextAll('.err').eq(0).css('display','inline');
                }
                else if ( $(this).closest('div').hasClass('a'+type) && $(this).is('[type="checkbox"]') ) {
                    var name = $(this).attr('name');
                    result2 = false;
                    $('.param [name="'+name+'"]').each( function(){
                        if ( $(this).is(':checked') ) {result2 = true;}
                    } );
                    if (!result2) {
                        $(this).closest('ul').nextAll('.err').eq(0).css('display','inline');
                    }
                }
            }
        }
    });
    return result;
}

$(document).ready(function(){
/* здесь сложновато, не получилось совместить 3: когда приходишь сюда, когда уже выбрано; пустые поля; изменить то что выбрано */
    var deals = $('select[name="deal"] option:selected').val();
    if (deals=='prodazha') {
        $('.t'+$('select[name="types"] option:selected').val()).show();
        var type = $('select[name="types"] option:selected').val();
        $('.hidden').hide();
        $('.t'+type, '.param').show();
        $('.err').hide();
    } else {
        $('.a'+$('select[name="types"] option:selected').val()).show();
        var type = $('select[name="types"] option:selected').val();
        $('.hidden').hide();
        $('.a'+type, '.param').show();
        $('.err').hide();
    }

    $('select[name="deal"]').change(function() {
        var deals = $('option:selected',this).val();
        if (deals == 'prodazha') { result = false;
            $('.a'+$('select[name="types"] option:selected').val()).hide();
            $('.t'+$('select[name="types"] option:selected').val()).show();
            $('select[name="types"]').change(function(){
                var type = $('option:selected',this).val();
                $('.hidden').hide();
                $('.t'+type, '.param').show();
                $('.err').hide();
            });
        } else { result = false;
            $('.t'+$('select[name="types"] option:selected').val()).hide();
            $('.a'+$('select[name="types"] option:selected').val()).show();
            $('select[name="types"]').change(function(){
                var type = $('option:selected',this).val();
                $('.hidden').hide();
                $('.a'+type, '.param').show();
                $('.err').hide();
            });
        }
    });

        $('.t'+$('select[name="types"] option:selected').val()).show();
        //$('.a'+$('select[name="types"] option:selected').val()).show();
        $('select[name="types"]').change(function(){
            var type = $('option:selected',this).val();
            $('.hidden').hide();
            $('.t'+type, '.param').show();//.trigger('change');
            $('.err').hide();
        });


    // реакция при нажатии Сохранить
    $('.span6 .bg-color-pink.fg-color-white').click(function(){
        $('.err').hide();
        var type = $('select[name="types"] option:selected').val();
        var result = iter_in_required($('.location .required'),0);
        if (result) result = iter_in_required($('.other-param .required'),0);
        else iter_in_required($('.other-param .required'),0);
        if (result) result = iter_in_required($('.cost .required'),0);
        else  iter_in_required($('.cost .required'),0);


        if (type != ''){
           if (result) result = iter_in_required($('.param .required'),type);
           else iter_in_required($('.param .required'),type);
        }
        else {
            $('select[name="types"]').nextAll('.err').eq(0).css('display','inline');
            result=false;
        }

        $('.input-control.file input').each(function(){
            if (  $(this).val() && !$(this).parent().nextAll('div.input-control').eq(0).find('input').val()  && !$(this).parent().nextAll('.input-control').eq(1).find('input').is(':checked')  && !$(this).parent().find('a').length )
            {
            result=false;
            $(this).parent().nextAll('.err').eq(1).css('display','inline');
            }
            else if (  !$(this).val() && $(this).parent().nextAll('div.input-control').eq(0).find('input').val()  && !$(this).parent().nextAll('.input-control').eq(1).find('input').is(':checked') && !$(this).parent().find('a').length )
            {
            result=false;
            $(this).parent().nextAll('.err').eq(0).css('display','inline');
            }
            else if (  $(this).parent().find('a').length && !$(this).parent().nextAll('.input-control').eq(1).find('input').is(':checked') && !$(this).parent().nextAll('div.input-control').eq(0).find('input').val()  )
            {
            result=false;
            $(this).parent().nextAll('.err').eq(0).css('display','inline');
            }
        });

        if (result) $('#real-form').submit();
        else alert('Заполните обязательные поля.');

    });

Последний раз редактировалось rss, 05.11.2013 в 11:51.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод для конвертирования едениц px, em, %, pt. jegit Элементы интерфейса 0 07.03.2013 16:15
jQuery + Select xmentor Opera, Safari и др. 0 19.10.2012 13:47
jquery select + reset? rommeq jQuery 2 23.06.2012 21:46
JQuery и Select iskiz jQuery 12 30.12.2011 13:52
Проблема с динамическим формированием select elepsion jQuery 1 31.10.2010 14:31