Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как отправить на сервер только выбранные радио 
:(
    Опции темы
Cheizer
Дата 29.4.2014, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Дорогие друзья, всю голову изломал, не могу понять как правильно сделать.

Есть форма на сайте, аяксом отправляется, вот часть html инпутов, как пример NAME все работает отлично на всех моментах до почты пользователя. НО понадобилось добавить RADIO кнопки, и все труба, а проблема в том, что не знаю как отправлять на почту только выбранный РАДИО, они все имеют значения, и аякс отправляет их успешно, php принимает и в письмо, и никаких выбранных, или все, или ничего 
Код

<label class="name">
<input type="text" value="Введите ваше имя:">
<br class="clear">
<span class="error error-empty">*</span><span class="empty error-empty">*</span> 
</label>
 
вот они мои кнопочки проблемные:
<label class="kol">
<input type="radio" class="group1" name="kol" value="1" checked> 1 шт<br>
<input type="radio" class="group1" name="kol" value="2"> 2 шт
</label>




вот часть обработчика яваскрипт, кjторый уже передает PHP, и вот тут я думаю самая заморочка с этим getValFromLabel, если без него, то все две переменные отправляет. Вот как тут правильно написать что бы VALUE одно и ВЫБРАННОЕ улетало к php?????



Код

//forms
;(function($){
    $.fn.forms=function(o){
        return this.each(function(){
            var th=$(this)
                ,_=th.data('forms')||{
                    errorCl:'error',
                    emptyCl:'empty',
                    invalidCl:'invalid',
                    notRequiredCl:'notRequired',
                    successCl:'success',
                    successShow:'4000',
                    mailHandlerURL:'bat/MailHandler.php',
                    ownerEmail:'[email protected]',
                    product:'Заказ',
                    stripHTML:true,
                    smtpMailServer:'localhost',
                    targets:'input,textarea',
                    controls:'a[data-type=reset],a[data-type=submit]',
                    validate:true,
                    rx:{
                        ".state":{rx:/.{2}/,target:'input'},
                        ".state":{rx:/^[a-zA-Z'][a-zA-Z-' ]+[a-zA-Z']?$/,target:'input'},
                        ".email":{rx:/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i,target:'input'},
                        ".phone":{rx:/^\+?(\d[\d\-\+\(\) ]{5,}\d$)/,target:'input'},
                        ".fax":{rx:/^\+?(\d[\d\-\+\(\) ]{5,}\d$)/,target:'input'},
                        ".message":{rx:/.{15}/,target:'textarea'}
                    },
                    preFu:function(){
                        _.labels.each(function(){
                            var label=$(this),
                                inp=$(_.targets,this),
                                defVal=inp.val(),
                                trueVal=(function(){
                                            var tmp=inp.is('input')?(tmp=label.html().match(/value=['"](.+?)['"].+/),!!tmp&&!!tmp[1]&&tmp[1]):inp.html()
                                            return defVal==''?defVal:tmp
                                        })()
                            trueVal!=defVal
                                &&inp.val(defVal=trueVal||defVal)
                            label.data({defVal:defVal})                                
                            inp
                                .bind('focus',function(){
                                    inp.val()==defVal
                                        &&(inp.val(''),_.hideEmptyFu(label),label.removeClass(_.invalidCl))
                                })
                                .bind('blur',function(){
                                    _.validateFu(label)
                                    if(_.isEmpty(label))
                                        inp.val(defVal)
                                        ,_.hideErrorFu(label.removeClass(_.invalidCl))                                            
                                })
                                .bind('keyup',function(){
                                    label.hasClass(_.invalidCl)
                                        &&_.validateFu(label)
                                })
                            label.find('.'+_.errorCl+',.'+_.emptyCl).css({display:'block'}).hide()
                        })
                        _.success=$('.'+_.successCl,_.form).hide()
                    },
                    isRequired:function(el){                            
                        return !el.hasClass(_.notRequiredCl)
                    },
                    isValid:function(el){                            
                        var ret=true
                        $.each(_.rx,function(k,d){
                            if(el.is(k))
                                ret=d.rx.test(el.find(d.target).val())                                        
                        })
                        return ret                            
                    },
                    isEmpty:function(el){
                        var tmp
                        return (tmp=el.find(_.targets).val())==''||tmp==el.data('defVal')
                    },
                    validateFu:function(el){                            
                        el.each(function(){
                            var th=$(this)
                                ,req=_.isRequired(th)
                                ,empty=_.isEmpty(th)
                                ,valid=_.isValid(th)                                
                            
                            if(empty&&req)
                                _.showEmptyFu(th.addClass(_.invalidCl))
                            else
                                _.hideEmptyFu(th.removeClass(_.invalidCl))
                            
                            if(!empty)
                                if(valid)
                                    _.hideErrorFu(th.removeClass(_.invalidCl))
                                else
                                    _.showErrorFu(th.addClass(_.invalidCl))                                
                        })
                    },
                    getValFromLabel:function(label){
                        var val=$('input,textarea',label).val()
                            ,defVal=label.data('defVal')                                
                        return label.length?val==defVal?'nope':val:'nope'
                    }
                    
                    
                    ,submitFu:function(){
                        _.validateFu(_.labels)                            
                        if(!_.form.has('.'+_.invalidCl).length)
                            $.ajax({
                                type: "POST",
                                url:_.mailHandlerURL,
                                data:{
                                    name:_.getValFromLabel($('.name',_.form)),
                                    email:_.getValFromLabel($('.email',_.form)),
                                    phone:_.getValFromLabel($('.phone',_.form)),
                                    gate:$('input.gate',_.form).val()||'nope',
                                    key:$('input.key',_.form).val()||'nope',
                                    count:_.getValFromLabel($('.count',_.form)),
                                    
                                    kol:$('input.kol',_.form).val()||'nope',
                                    
                                    twok:$('input.twok',_.form).val()||'nope',
                                    sam:$('input.sam',_.form).val()||'nope',
                                    deliw:$('input.deliw',_.form).val()||'nope',
                                    posta:$('input.posta',_.form).val()||'nope',
                                    
                                    fax:_.getValFromLabel($('.fax',_.form)),
                                    //message:_.getValFromLabel($('.message',_.form)),
                                    message:$('input.message',_.form).val()||'nope',
                                    pro_duct:_.product,
                                    owner_email:_.ownerEmail,
                                    stripHTML:_.stripHTML
                                },
                                success: function(){
                                    _.showFu()
                                }
                            })            
                    },
                    showFu:function(){
                        _.success.slideDown(function(){
                            setTimeout(function(){
                                _.success.slideUp()
                                _.form.trigger('reset')
                            },_.successShow)
                        })
                    },
                    controlsFu:function(){
                        $(_.controls,_.form).each(function(){
                            var th=$(this)
                            th
                                .bind('click',function(){
                                    _.form.trigger(th.data('type'))
                                    return false
                                })
                        })
                    },
                    showErrorFu:function(label){
                        label.find('.'+_.errorCl).slideDown()
                    },
                    hideErrorFu:function(label){
                        label.find('.'+_.errorCl).slideUp()
                    },
                    showEmptyFu:function(label){
                        label.find('.'+_.emptyCl).slideDown()
                        _.hideErrorFu(label)
                    },
                    hideEmptyFu:function(label){
                        label.find('.'+_.emptyCl).slideUp()
                    },
                    init:function(){
                        _.form=_.me                        
                        _.labels=$('label',_.form)

                        _.preFu()
                        
                        _.controlsFu()
                                                        
                        _.form
                            .bind('submit',function(){
                                if(_.validate)
                                    _.submitFu()
                                else
                                    _.form[0].submit()
                                return false
                            })
                            .bind('reset',function(){
                                _.labels.removeClass(_.invalidCl)                                    
                                _.labels.each(function(){
                                    var th=$(this)
                                    _.hideErrorFu(th)
                                    _.hideEmptyFu(th)
                                })
                            })
                        _.form.trigger('reset')
                    }
                }
            _.me||_.init(_.me=th.data({forms:_}))
            typeof o=='object'
                &&$.extend(_,o)
        })
    }
})(jQuery)
$(window).load(function(){
    $('#form').forms({
        ownerEmail:'[email protected]',
        product:'ЗАКАЗ ОБРАТНОГО ЗВОНКА (верх)'
    })
})
$(window).load(function(){
    $('#form1').forms({
        ownerEmail:'[email protected]',
        product:'ЗАКАЗ ОБРАТНОГО ЗВОНКА (низ)'
    })
})
$(window).load(function(){
    $('#form2').forms({
        ownerEmail:'[email protected]',
        product:'ЗАЯВКА НА 5 КОМПЛЕКТОВ (верх)'
    })
})
$(window).load(function(){
    $('#form3').forms({
        ownerEmail:'[email protected]',
        product:'ЗАЯВКА НА ПОКУПКУ ОПТОМ'
    })
})
$(window).load(function(){
    $('#form4').forms({
        ownerEmail:'[email protected]',
        product:'ЗАЯВКА НА 5 КОМПЛЕКТОВ (низ)'
    })
})
$(window).load(function(){
    $('#order0').forms({
        ownerEmail:'[email protected]',
        product:'ЗАКАЗ ПРОДУКЦИИ от 1 КОПМПЛЕКТА'
    })
})
$(window).load(function(){
    $('#order2').forms({
        ownerEmail:'[email protected]',
        product:'ЗАКАЗ ПРОДУКЦИИ от 3 КОПМПЛЕКТОВ'
    })
})
$(window).load(function(){
    $('#order3').forms({
        ownerEmail:'[email protected]',
        product:'ЗАКАЗ ПРОДУКЦИИ от 5 КОПМПЛЕКТОВ'
    })
})






Вот тут принимается и на почту, но главное распечатывает все и выбранные и не выбранные .

Код

if($_POST['kol']!='nope'){
        $kol = $_POST["kol"];
        $messageBody .= '<p>штуки: ' .$kol. ' комплект</p>' . "\n";
        
    }



Как сделать так, что бы kol:$('input.kol',_.form).val()||'nope', в яваскрипт обработчике, принимал только выбранной кнокпи значение???? И отправлял в одной переменно в php обработчик?

Это сообщение отредактировал(а) Cheizer - 29.4.2014, 16:53
PM MAIL   Вверх
Aliance
Дата 29.4.2014, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



А как можно ответить на этот вопрос, не видя листинга функции getValFromLabel?
PM MAIL WWW ICQ Skype   Вверх
Cheizer
Дата 29.4.2014, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Цитата(Aliance @ 29.4.2014,  16:26)
А как можно ответить на этот вопрос, не видя листинга функции getValFromLabel?

Извиняюсь, просто он очень большой smile

Код

//forms
;(function($){
    $.fn.forms=function(o){
        return this.each(function(){
            var th=$(this)
                ,_=th.data('forms')||{
                    errorCl:'error',
                    emptyCl:'empty',
                    invalidCl:'invalid',
                    notRequiredCl:'notRequired',
                    successCl:'success',
                    successShow:'4000',
                    mailHandlerURL:'bat/MailHandler.php',
                    ownerEmail:'[email protected]',
                    product:'Заказ',
                    stripHTML:true,
                    smtpMailServer:'localhost',
                    targets:'input,textarea',
                    controls:'a[data-type=reset],a[data-type=submit]',
                    validate:true,
                    rx:{
                        ".state":{rx:/.{2}/,target:'input'},
                        ".state":{rx:/^[a-zA-Z'][a-zA-Z-' ]+[a-zA-Z']?$/,target:'input'},
                        ".email":{rx:/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i,target:'input'},
                        ".phone":{rx:/^\+?(\d[\d\-\+\(\) ]{5,}\d$)/,target:'input'},
                        ".fax":{rx:/^\+?(\d[\d\-\+\(\) ]{5,}\d$)/,target:'input'},
                        ".message":{rx:/.{15}/,target:'textarea'}
                    },
                    preFu:function(){
                        _.labels.each(function(){
                            var label=$(this),
                                inp=$(_.targets,this),
                                defVal=inp.val(),
                                trueVal=(function(){
                                            var tmp=inp.is('input')?(tmp=label.html().match(/value=['"](.+?)['"].+/),!!tmp&&!!tmp[1]&&tmp[1]):inp.html()
                                            return defVal==''?defVal:tmp
                                        })()
                            trueVal!=defVal
                                &&inp.val(defVal=trueVal||defVal)
                            label.data({defVal:defVal})                                
                            inp
                                .bind('focus',function(){
                                    inp.val()==defVal
                                        &&(inp.val(''),_.hideEmptyFu(label),label.removeClass(_.invalidCl))
                                })
                                .bind('blur',function(){
                                    _.validateFu(label)
                                    if(_.isEmpty(label))
                                        inp.val(defVal)
                                        ,_.hideErrorFu(label.removeClass(_.invalidCl))                                            
                                })
                                .bind('keyup',function(){
                                    label.hasClass(_.invalidCl)
                                        &&_.validateFu(label)
                                })
                            label.find('.'+_.errorCl+',.'+_.emptyCl).css({display:'block'}).hide()
                        })
                        _.success=$('.'+_.successCl,_.form).hide()
                    },
                    isRequired:function(el){                            
                        return !el.hasClass(_.notRequiredCl)
                    },
                    isValid:function(el){                            
                        var ret=true
                        $.each(_.rx,function(k,d){
                            if(el.is(k))
                                ret=d.rx.test(el.find(d.target).val())                                        
                        })
                        return ret                            
                    },
                    isEmpty:function(el){
                        var tmp
                        return (tmp=el.find(_.targets).val())==''||tmp==el.data('defVal')
                    },
                    validateFu:function(el){                            
                        el.each(function(){
                            var th=$(this)
                                ,req=_.isRequired(th)
                                ,empty=_.isEmpty(th)
                                ,valid=_.isValid(th)                                
                            
                            if(empty&&req)
                                _.showEmptyFu(th.addClass(_.invalidCl))
                            else
                                _.hideEmptyFu(th.removeClass(_.invalidCl))
                            
                            if(!empty)
                                if(valid)
                                    _.hideErrorFu(th.removeClass(_.invalidCl))
                                else
                                    _.showErrorFu(th.addClass(_.invalidCl))                                
                        })
                    },
                    getValFromLabel:function(label){
                        var val=$('input,textarea',label).val()
                            ,defVal=label.data('defVal')                                
                        return label.length?val==defVal?'nope':val:'nope'
                    }
                    
                    
                    ,submitFu:function(){
                        _.validateFu(_.labels)                            
                        if(!_.form.has('.'+_.invalidCl).length)
                            $.ajax({
                                type: "POST",
                                url:_.mailHandlerURL,
                                data:{
                                    name:_.getValFromLabel($('.name',_.form)),
                                    email:_.getValFromLabel($('.email',_.form)),
                                    phone:_.getValFromLabel($('.phone',_.form)),
                                    gate:$('input.gate',_.form).val()||'nope',
                                    key:$('input.key',_.form).val()||'nope',
                                    count:_.getValFromLabel($('.count',_.form)),
                                    
                                    kol:$('input.kol',_.form).val()||'nope',
                                    
                                    twok:$('input.twok',_.form).val()||'nope',
                                    sam:$('input.sam',_.form).val()||'nope',
                                    deliw:$('input.deliw',_.form).val()||'nope',
                                    posta:$('input.posta',_.form).val()||'nope',
                                    
                                    fax:_.getValFromLabel($('.fax',_.form)),
                                    //message:_.getValFromLabel($('.message',_.form)),
                                    message:$('input.message',_.form).val()||'nope',
                                    pro_duct:_.product,
                                    owner_email:_.ownerEmail,
                                    stripHTML:_.stripHTML
                                },
                                success: function(){
                                    _.showFu()
                                }
                            })            
                    },
                    showFu:function(){
                        _.success.slideDown(function(){
                            setTimeout(function(){
                                _.success.slideUp()
                                _.form.trigger('reset')
                            },_.successShow)
                        })
                    },
                    controlsFu:function(){
                        $(_.controls,_.form).each(function(){
                            var th=$(this)
                            th
                                .bind('click',function(){
                                    _.form.trigger(th.data('type'))
                                    return false
                                })
                        })
                    },
                    showErrorFu:function(label){
                        label.find('.'+_.errorCl).slideDown()
                    },
                    hideErrorFu:function(label){
                        label.find('.'+_.errorCl).slideUp()
                    },
                    showEmptyFu:function(label){
                        label.find('.'+_.emptyCl).slideDown()
                        _.hideErrorFu(label)
                    },
                    hideEmptyFu:function(label){
                        label.find('.'+_.emptyCl).slideUp()
                    },
                    init:function(){
                        _.form=_.me                        
                        _.labels=$('label',_.form)

                        _.preFu()
                        
                        _.controlsFu()
                                                        
                        _.form
                            .bind('submit',function(){
                                if(_.validate)
                                    _.submitFu()
                                else
                                    _.form[0].submit()
                                return false
                            })
                            .bind('reset',function(){
                                _.labels.removeClass(_.invalidCl)                                    
                                _.labels.each(function(){
                                    var th=$(this)
                                    _.hideErrorFu(th)
                                    _.hideEmptyFu(th)
                                })
                            })
                        _.form.trigger('reset')
                    }
                }
            _.me||_.init(_.me=th.data({forms:_}))
            typeof o=='object'
                &&$.extend(_,o)
        })
    }
})(jQuery)
$(window).load(function(){
    $('#form').forms({
        ownerEmail:'[email protected]',
        product:'ЗАКАЗ ОБРАТНОГО ЗВОНКА (верх)'
    })
})
$(window).load(function(){
    $('#form1').forms({
        ownerEmail:'[email protected]',
        product:'ЗАКАЗ ОБРАТНОГО ЗВОНКА (низ)'
    })
})
$(window).load(function(){
    $('#form2').forms({
        ownerEmail:'[email protected]',
        product:'ЗАЯВКА НА 5 КОМПЛЕКТОВ (верх)'
    })
})
$(window).load(function(){
    $('#form3').forms({
        ownerEmail:'[email protected]',
        product:'ЗАЯВКА НА ПОКУПКУ ОПТОМ'
    })
})
$(window).load(function(){
    $('#form4').forms({
        ownerEmail:'[email protected]',
        product:'ЗАЯВКА НА 5 КОМПЛЕКТОВ (низ)'
    })
})
$(window).load(function(){
    $('#order0').forms({
        ownerEmail:'[email protected]',
        product:'ЗАКАЗ ПРОДУКЦИИ от 1 КОПМПЛЕКТА'
    })
})
$(window).load(function(){
    $('#order2').forms({
        ownerEmail:'[email protected]',
        product:'ЗАКАЗ ПРОДУКЦИИ от 3 КОПМПЛЕКТОВ'
    })
})
$(window).load(function(){
    $('#order3').forms({
        ownerEmail:'[email protected]',
        product:'ЗАКАЗ ПРОДУКЦИИ от 5 КОПМПЛЕКТОВ'
    })
})



PM MAIL   Вверх
ksnk
Дата 29.4.2014, 20:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Код

...
getValFromLabel:function(label){
    var input=$('input,textarea',label);
    if(input[0].type=='radio' && !input[0].checked) return 'nope';
    var val=input.val()
        ,defVal=label.data('defVal')                                
    return label.length?val==defVal?'nope':val:'nope'
}
...



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Cheizer
Дата 30.4.2014, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Цитата(ksnk @ 29.4.2014,  20:59)
Код

...
getValFromLabel:function(label){
    var input=$('input,textarea',label);
    if(input[0].type=='radio' && !input[0].checked) return 'nope';
    var val=input.val()
        ,defVal=label.data('defVal')                                
    return label.length?val==defVal?'nope':val:'nope'
}
...

Спасибо, подменил это:

Код

getValFromLabel:function(label){
                        var val=$('input,textarea',label).val()
                            ,defVal=label.data('defVal')                                
                        return label.length?val==defVal?'nope':val:'nope'
                    }


на ваш код с добавлением проверки на чекед радио

Код

getValFromLabel:function(label){
    var input=$('input,textarea',label);
    if(input[0].type=='radio' && !input[0].checked) return 'nope';
    var val=input.val()
        ,defVal=label.data('defVal')                                
    return label.length?val==defVal?'nope':val:'nope'
}


И перестали отправляться формы, ошибка похоже где то :( и как это использовать в ,submitFu:function()???



PM MAIL   Вверх
ksnk
Дата 30.4.2014, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Цитата(Cheizer @  30.4.2014,  09:01 Найти цитируемый пост)
И перестали отправляться формы, ошибка похоже где то :( и как это использовать в ,submitFu:function()???

Вероятно, отлаживать? 
В хроме есть прекрасная панель отладки для Javascript.



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Cheizer
Дата 30.4.2014, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Цитата(ksnk @ 29.4.2014,  20:59)
Код

...
getValFromLabel:function(label){
    var input=$('input,textarea',label);
    if(input[0].type=='radio' && !input[0].checked) return 'nope';
    var val=input.val()
        ,defVal=label.data('defVal')                                
    return label.length?val==defVal?'nope':val:'nope'
}
...

проанализировал на баг, пишет Uncaught TypeError: Cannot read property 'type' of undefined

Добавлено через 37 секунд
Цитата(ksnk @ 30.4.2014,  09:21)
Цитата(Cheizer @  30.4.2014,  09:01 Найти цитируемый пост)
И перестали отправляться формы, ошибка похоже где то :( и как это использовать в ,submitFu:function()???

Вероятно, отлаживать? 
В хроме есть прекрасная панель отладки для Javascript.

Да да, сразу не написал, решил поковырять, пишет Uncaught TypeError: Cannot read property 'type' of undefined 
PM MAIL   Вверх
ksnk
Дата 30.4.2014, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Ну, тогда так.
Код

...
getValFromLabel:function(label){
    var input=$('input,textarea',label);
    if(input.length>0 && input[0].type=='radio' && !input[0].checked) return 'nope';
    var val=input.val()
        ,defVal=label.data('defVal')                                
    return label.length?val==defVal?'nope':val:'nope'
}
...

Нужно посмотреть, в каких местах используется эта функция. В каком-то лабеле нет input или textarea.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Cheizer
Дата 30.4.2014, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Цитата(ksnk @ 30.4.2014,  09:36)
Ну, тогда так.
Код

...
getValFromLabel:function(label){
    var input=$('input,textarea',label);
    if(input.length>0 && input[0].type=='radio' && !input[0].checked) return 'nope';
    var val=input.val()
        ,defVal=label.data('defVal')                                
    return label.length?val==defVal?'nope':val:'nope'
}
...

Нужно посмотреть, в каких местах используется эта функция. В каком-то лабеле нет input или textarea.

Да нет, везде есть

Код

<form id="order3" class="form" onSubmit="">
<input class="gate" type="hidden" name="gate" value="<?=$_GET['utm_medium']?>"> 
<input class="key" type="hidden" name="key" value="<?=$_GET['utm_term']?>">
<div class="success_wrapper">
<div class="success" style="display:none;"><strong>Заявка отправлена</strong><br/>Мы с Вами свяжемся в ближайшее время!</div>
</div>
<fieldset style="border:none;">
<label class="name">
<input type="text" value="Введите ваше имя:">
<br class="clear">
<span class="error error-empty">*</span><span class="empty error-empty">*</span> </label>
<label class="phone">
<input type="tel" value="Ваш номер телефона:" />
<br class="clear">
<span class="error error-empty">*</span><span class="empty error-empty">*</span> </label>
<div class="clear"></div>

<label class="count">
<span style="font-size:15px; color:#224855;">Введите количество комплектов</span><br />
<input style="width:74px;" type="text" value="шт:">
<br class="clear">
<span class="error error-empty">*</span><span class="empty error-empty">*</span> 
</label>

<div align="left" class="radio">
<hr style="width:270px; margin:10px auto 10px auto;">
<input type="radio" class="sam" name="group2" value="Самовывоз"><span style="font-size:18px; color:#224855;">Самовывоз</span><br>
<input type="radio" class="deliw" name="group2" value="Курьером"><span style="font-size:18px; color:#224855;">Курьером</span><br>
<input type="radio" class="posta" name="group2" value="Почтой" checked><span style="font-size:18px; color:#224855;">Почтой</span>
</div>

<label class="message">
<textarea>Адрес доставки: (не менее 15 символов)</textarea>
<br class="clear">
<span class="error error-empty" style="display: none;">*</span><span class="empty error-empty" style="display: block;">*</span> 
</label>



<a href="" data-type="submit" >Отправить заявку</a>
<div class="clear"></div>
</fieldset></form>

PM MAIL   Вверх
Aliance
Дата 30.4.2014, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Можно сделать в getValFromLabel блок try/catch где в случае ошибки дампать содержание переменной input
PM MAIL WWW ICQ Skype   Вверх
Cheizer
Дата 30.4.2014, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Цитата(ksnk @ 30.4.2014,  09:36)
Ну, тогда так.
Код

...
getValFromLabel:function(label){
    var input=$('input,textarea',label);
    if(input.length>0 && input[0].type=='radio' && !input[0].checked) return 'nope';
    var val=input.val()
        ,defVal=label.data('defVal')                                
    return label.length?val==defVal?'nope':val:'nope'
}
...

Нужно посмотреть, в каких местах используется эта функция. В каком-то лабеле нет input или textarea.

Да, вот так форма отправляется, ошибок нет, но как использовать для kol:$('input.kol',_.form).val()||'nope', в функции:

Код

,submitFu:function(){
                        _.validateFu(_.labels)                            
                        if(!_.form.has('.'+_.invalidCl).length)
                            $.ajax({
                                type: "POST",
                                url:_.mailHandlerURL,
                                data:{
                                    name:_.getValFromLabel($('.name',_.form)),
                                    email:_.getValFromLabel($('.email',_.form)),
                                    phone:_.getValFromLabel($('.phone',_.form)),
                                    gate:$('input.gate',_.form).val()||'nope',
                                    key:$('input.key',_.form).val()||'nope',
                                    count:_.getValFromLabel($('.count',_.form)),
                                    
                                    kol:$('input.kol',_.form).val()||'nope',

                                    twok:$('input.twok',_.form).val()||'nope',
                                    
                                    sam:$('input.sam',_.form).val()||'nope',
                                    deliw:$('input.deliw',_.form).val()||'nope',
                                    posta:$('input.posta',_.form).val()||'nope',
                                    
                                    fax:_.getValFromLabel($('.fax',_.form)),
                                    message:$('textarea.message',_.form).val()||'nope',
                                    
                                    pro_duct:_.product,
                                    owner_email:_.ownerEmail,
                                    stripHTML:_.stripHTML
                                },
                                success: function(){
                                    _.showFu()
                                }
                            })            
                    },


а то все равно приходит первое поле из двух, не зависимо от выбора:

Код

Код

<input type="radio" class="kol" name="kol" value="1"><span style="font-size:18px; color:#224855;">1 комплект</span><br>
<input type="radio" class="kol" name="kol" value="2"><span style="font-size:18px; color:#224855;">2 комплекта</span>



Это сообщение отредактировал(а) Cheizer - 30.4.2014, 12:53
PM MAIL   Вверх
Cheizer
Дата 30.4.2014, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Цитата(Aliance @ 30.4.2014,  10:09)
Можно сделать в getValFromLabel блок try/catch где в случае ошибки дампать содержание переменной input

Но как сделать проверку на выбранный RADIO??? Приходит просто значение первого RADIO не зависимо от выбора, даже если второй выбираешь.
PM MAIL   Вверх
Aliance
Дата 30.4.2014, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Может стоит попробовать jQuery pseudo selectors (в частности :checked)?

Вообще, по-моему, логически не верно помещать 2 элемента формы (будь то radio или же любой другой) внутрь одного элемента label. Там должна быть связь один-к-одному.

Это сообщение отредактировал(а) Aliance - 30.4.2014, 13:20
PM MAIL WWW ICQ Skype   Вверх
Cheizer
Дата 30.4.2014, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Цитата(Aliance @ 30.4.2014,  13:18)
Может стоит попробовать jQuery pseudo selectors (в частности :checked)?

Вообще, по-моему, логически не верно помещать 2 элемента формы (будь то radio или же любой другой) внутрь одного элемента label. Там должна быть связь один-к-одному.

Да действительно, в разные лейблы хорошая идея, но этот JS код он не понимает тип RADIO :( не отправляется форма из за этого
PM MAIL   Вверх
ksnk
Дата 30.4.2014, 14:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Цитата(Aliance @  30.4.2014,  13:18 Найти цитируемый пост)
, логически не верно помещать 2 элемента формы

А вот в чем дело!

Тогда так
Код

...
getValFromLabel:function(label){
    var input=$('input,textarea',label);
    if((input.length>0 && input[0].type=='radio'){
       input = $(':checked',input);
    }
    if(input.length>0 && input[0].type=='radio' && !input[0].checked) return 'nope';
    var val=input.val()
        ,defVal=label.data('defVal')                                
    return label.length?val==defVal?'nope':val:'nope'
}
...


Добавлено @ 14:15
Иногда проще на  jsfiddle.net сделать тестовый пример. Его и отлаживать можно коллегиально, а не методом "удаленного тыка" 

Это сообщение отредактировал(а) ksnk - 30.4.2014, 14:19


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0767 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.