[jQ]jQuery显式操作Checkbox,并用数组存储关联值的方案

-------------------------------------------------------------------------------------------------------

/** * 显式选中清空Checkbox(jQuery代码) * @黑眼诗人 <www.chenwei.ws> */
var obj = $(‘:checkbox‘);
obj.on(‘click‘,function(){
    oThis = $(this);

    if(oThis.attr(‘selected‘) == ‘selected‘){
        oThis.removeAttr(‘selected‘);
    }else{
        oThis.attr({‘selected‘:true});
    }
});

/** * 注:如果是点击按钮(不直接点击Checkbox)触发事件,先取消可见勾选,再清除显式的属性勾选 *  * 如:$(‘:checkbox‘).each(function(){ *     if($(this).attr(‘selected‘) == ‘selected‘) *     { *           $(this).attr(‘checked‘, false);        //取消可见的勾选 *           $(this).removeAttr(‘selected‘);        //取消显式的属性勾选 *     } *   }); */
/**
 * 显式将Checkbox和隐藏值存入数组(jQuery代码)
 * @黑眼诗人 <www.chenwei.ws>
 */
var info = {"discount" : {"discount_id" : [], "discount_lesson_id" : []}};

infoDiscountId = info[‘discount‘][‘discount_id‘];
infoDisLessonId = info[‘discount‘][‘discount_lesson_id‘];

$(‘input[name="discount_id"]‘).on(‘click‘, function(){
    var oThis = $(this);

    if(oThis.attr(‘selected‘) == ‘selected‘){
        oThis.removeAttr(‘selected‘);

        $.each(infoDisLessonId, function(i, n){
            if(infoDisLessonId[i] == oThis.prev(‘input‘).val()){
                delete infoDisLessonId[i]; //唯一性删除
                j = i;    //对应DiscountId中的i
            }
        });

        delete infoDiscountId[j];

        console.log(info);

    }else{

        oThis.attr({‘selected‘:true});

        infoDiscountId.push(oThis.val());  //数组新增元素
        infoDisLessonId.push(oThis.prev(‘input‘).val()); //新增元素2

        console.log(info);
    }
});

/*存在问题: * 1.删除infoDisLessonId[i]时,虽然元素分别在infoDiscountId 和 infoDisLessonId中,但如果碰到它们当中有相同值,此时都将删除,这是所不希望发生的。 * 2.使用delete infoDiscountId[i]此种形式的删除时,原数组长度不变,索引还在,只是当前infoDiscountId[i]值变为undefined。 */
/** * 解决例2当中的存在问题,更换数组格式储值(jQuery代码) * @黑眼诗人 <www.chenwei.ws> */var info = {"discount" : []};

infoDiscountId = info[‘discount‘];

$(‘input[name="discount_id"]‘).on(‘click‘, function(){
    var oThis = $(this);

    if(oThis.attr(‘selected‘) == ‘selected‘){
        oThis.removeAttr(‘selected‘);

        $.each(infoDiscountId, function(i, n){  
            if(infoDiscountId[i][‘discount_id‘] == oThis.val() && infoDiscountId[i][‘discount_lesson_id‘] == oThis.prev(‘input‘).val())
            {
                //删除前进行唯一性判断,参考添加时的存储方式
                infoDiscountId.splice(i, 1); //使用splice删除单个元素,代替delete
            }
        });

        console.log(info);

    }else{

        oThis.attr({‘selected‘:true});

        infoDiscountId.push({"discount_id":oThis.val()});  //push在数组末尾添加一对数组元素,discount_id

        var index = infoDiscountId.length - 1;        //获得新增元素的索引

        infoDiscountId[index][‘discount_lesson_id‘] = oThis.prev(‘input‘).val(); //在此索引下再增加一对数组元素,discount_lesson_id

        console.log(info);
    }
});

/* * 完美解决例2中存在的问题 */

应用场景:当需要由多个表数据关联得到某一具体数值时,上例是一种解决的思路和方案。

Link: http://www.cnblogs.com/farwish/p/3964350.html

时间: 2024-12-29 17:59:57

[jQ]jQuery显式操作Checkbox,并用数组存储关联值的方案的相关文章

jQuery链式操作

讨论jQuery的文章很多.然而,关于jQuery的链式操作的文章并无多少.好的代码会带来速度的提升.快速渲染和响应意味着更好的用户体验. 下面就来讲讲jQuery的链式操作. 很多时候我们写代码的时候会这样去写: $("div").css("background","#eee") $("div").text("关注前端,关注用户体验-冀"); 这重复的去获取DIV这个节点非常影响性能,这时你可能会想到这样

使用jquery获取被选中checkbox复选框的值

使用jquery获取被选中checkbox复选框的值:checkbox是重要的表单元素,在很多多项选择中使用,下面就通过代码实例介绍一下如何获取复选框中所有被选中项的值,希望能够给需要的朋友带来一定的帮助.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.

jquery获取选中的checkbox复选框的值

jquery获取选中的checkbox复选框的值:checkbox复选框是常用的表单元素之一,既然使用,一般就要获取选中的复选框的值,下面就介绍一下如何使用jQuery实现此功能.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/

jQuery链式操作[转]

用过jQuery的朋友都知道他强大的链式操作,方便,简洁,易于理解,如下 $("has_children").click(function(){ $(this).addClass("highlight").children("a").show().end().siblings().removeClass("highlight").children("a").hide(); }); 1.jQuery的链式操作

jQuery链式操作如何返回上一级DOM

有时候我们在链式操作的时候,选择到了其他的DOM进行操作,如何再返回先前的dom呢,有一下几个方法,end(); addBack(); add(); 使用形式 $("#divFather").show().find("a").addClass("now").end().addClass("highLight") 此段代码表示由ID为divFather往下取得了a标签加上now类之后,再返回到divFather就行添加hight

JQuery链式操作简单的菜单列表

看到这个简单的菜单demo,也是为了再看看JQuery对DOM的操作,一直都记不牢,特别是siblings()这个总是想不起来. 这次再过一遍JQuery,不管简单的还是复杂的demo 还是坚持练习一遍吧!只为记录,如果同时能给你提供帮助,这样最好! <style> .wrap{ width: 100%; } .inner{ width: 62.5%; margin: auto; padding: 50px; border:1px solid #ccc; box-sizing:border-b

jQery的链式操作和商城简易导航栏

今天要记录的是jq的一些简单操作.项目的需求是做一个导航栏,单机不同的商品名称链接,显示相应的内容.用js来写的话相对代码量要多一些,选择jqrey一行则可以搞定,下面呢是我的代码和效果图 这个是初始化点击后 首先是我们的布局部分,这里呢我直接把我的代码写进来,样式可能有点抽象 <style> .level1{ list-style: none; line-height: 30px; width: 100px; cursor: pointer; border-top: none; } .lev

jQuery对象的链式操作用法分析

可以使用下面的原则判断一个函数返回的时候是jQuery对象,即是否可以用于链式操作. 除了获取某些数据的函数,比如获取属性值"attr(name)",获取集合大小"size()"这些函数明显是返回数据的.除了这些函数之外的jQuery函数都可以用于链式操作,比如设置属性"attr(name.value)". 链式编程.html('val').text('val').css()链式编程,隐式迭代.链式编程注意:$('div').html('设置值'

jquery设计思想之写法-方法函数化&amp;链式操作

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="