自定义样式的单选、多选按钮逻辑

首选全局声明一个对象,用来储存所有题的答案

var answerData = {
    'q1':'',
    'q2':''
}

单选题

dom结构:

<div class="q1">
    <div class="qImg"></div>//选项是否被选中图片
    <div class="qBody">
        <div class="question">请问您的性别是?</div>
        <div class="answer">
            <div class="coin"></div>
            <div class="cont single" data-num="q1" data-ans="A">A.男</div>
        </div>
        <div class="answer">
            <div class="coin"></div>
            <div class="cont single" data-num="q1" data-ans="B">B.女</div>
        </div>
    </div>
</div>


javascript:

function single(){
    var node = $(this).parent().children()[0],
        nextNode = $(this).parent().children()[1],
        nodeNum = $(nextNode).attr('data-num'),
        nodeVal = $(nextNode).attr('data-ans'),
        bg = node.style.backgroundImage || 'url(coin0.png)',
                //获取选项的状态,默认为进入页面时的未选择(coin0.png:未选择时的图片样式)
        isChoice = bg.indexOf('coin0.png'),
        other = $(this).parent().parent().children('.answer').children('.coin');
        $(other).css('background-image', 'url(coin0.png)');
            //首先将所有选项重置为未选择
        if (isChoice > 0) {
           $(node).css('background-image', 'url(coin.png)');
           answerData[nodeNum] = nodeVal;
        } else {
           $(node).css('background-image', 'url(coin0.png)');
           answerData[nodeNum] = '';
       }
            //将单选答案存进对象,如果重置前是已选状态则变为未选状态,反之亦然
}
$('.single').on('click',single);


多选题


dom结构:

<div class="q2">
     <div class="qImg"></div>
     <div class="qBody">
         <div class="question">对于七座MPV,您认为您最看重的因素有哪些?(最多选三项)</div>
         <div class="answer">
             <div class="coin"></div>
             <div class="cont more" data-num="q2" data-ans="A">A.租赁价格</div>
         </div>
         <div class="answer">
             <div class="coin"></div>
             <div class="cont more" data-num="q2" data-ans="B">B.空间大小</div>
         </div>
         <div class="answer">
             <div class="coin"></div>
             <div class="cont more" data-num="q2" data-ans="C">C.操作性能</div>
         </div>
         <div class="answer">
             <div class="coin"></div>
             <div class="cont more" data-num="q2" data-ans="D">D.乘坐舒适度</div>
         </div>
         <div class="answer">
             <div class="coin"></div>
             <div class="cont more" data-num="q2" data-ans="E">E.车辆状况</div>
         </div>
         <div class="answer">
             <div class="coin"></div>
             <div class="cont more" data-num="q2" data-ans="F">F.油耗大小</div>
         </div>
         <div class="answer">
             <div class="coin"></div>
             <div class="cont more" data-num="q2" data-ans="G">G.汽车外观</div>
         </div>
         <div class="answer">
             <div class="coin"></div>
             <div class="cont more" data-num="q2" data-ans="H">H.噪音小</div>
         </div>
         <div class="answer">
             <div class="coin"></div>
             <div class="cont more" data-num="q2" data-ans="I">I.其他</div>
         </div>
     </div>
 </div>


javascript:

function more(){
    var node = $(this).parent().children()[0],
                nextNode = $(this).parent().children()[1],
                nodeNum = $(nextNode).attr('data-num'),
                nodeVal = $(nextNode).attr('data-ans'),
                bg = node.style.backgroundImage || 'url(coin0.png)',
                //获取选项的状态,默认为进入页面时的未选择
                isChoice = bg.indexOf('coin0.png'),
                moreArr = answerData[nodeNum];
    if (isChoice > 0) {
        if (moreArr.size < 3) {
            moreArr.add(nodeVal);
            answerData[nodeNum] = moreArr;
            $(node).css('background-image', 'url(coin.png)');
        } else {
            return false;
        }
    } else {
        moreArr.delete(nodeVal);
        $(node).css('background-image', 'url(coin0.png)');
    }
}
$('.more').on('click',more);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值