Subversion Repositories SmartDukaan

Rev

Rev 448 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
448 rajveer 1
/*
2
 * Chained - jQuery chained selects plugin
3
 *
4
 * Copyright (c) 2010 Mika Tuupola
5
 *
6
 * Licensed under the MIT license:
7
 *   http://www.opensource.org/licenses/mit-license.php
8
 *
9
 */
10
 
11
(function($) {
12
 
13
    $.fn.chained = function(parent_selector, options) { 
14
 
15
        return this.each(function() {
16
 
17
            /* Save this to self because this changes when scope changes. */            
18
            var self   = this;
19
            var backup = $(self).clone();
20
 
21
            /* Handles maximum two parents now. */
22
            $(parent_selector).each(function() {
23
                $(this).bind("change", function() {
24
                    $(self).html($(backup).html());
25
 
26
 
27
                    /* If multiple parents build classname like foo\bar. */
28
                    var selected = "";
29
                    $(parent_selector).each(function() {
30
                        selected += "\\" + $(":selected", this).val();
31
                    });
32
                    selected = selected.substr(1);
33
 
34
                    /* Also check for first parent without subclassing. */
35
                    /* TODO: This should be dynamic and check for each parent */
36
                    /*       without subclassing. */
37
                    var first = $(parent_selector).first();
38
                    var selected_first = $(":selected", first).val();
39
 
40
                    $("option", self).each(function() {
41
                        /* Remove unneeded items but save the default value. */
42
                        if (!$(this).hasClass(selected) && 
43
                            !$(this).hasClass(selected_first) && $(this).val() !== "") {
44
                                $(this).remove();
45
                        }                        
46
                    });
47
 
48
                    /* If we have only the default value disable select. */
49
                    if (1 == $("option", self).size() && $(self).val() == "") {
50
                        $(self).attr("disabled", "disabled");
51
                    } else {
52
                        $(self).removeAttr("disabled");
53
                    }
54
 
55
                });
56
 
57
                /* Force updating the children. */
58
                $(this).trigger("change");             
59
 
60
            });
61
        });
62
    };
63
 
64
    /* Alias for those who like to use more English like syntax. */
65
    $.fn.chainedTo = $.fn.chained;
66
 
67
})(jQuery);