自定义选择框(UL-LI)与HTML表单相同的功能(Custom SelectBox (UL-LI)

2019-10-20 15:45发布

我工作的HTML表单上的定制要求。 这是个人项目,我不想用现成使用的插件。

我在这里把我所有的代码,并需要你让我越来越严重的问题的一个帮助。 首先,让我们看看我有下面的代码这样做的远!

我做了什么至今:我已选择-内部HTML表单OPTION结构。 我写了自定义的功能相同的转换成UL - 李结构保持与SELECT相同的功能 - 选择,而提交表单。

最重要的是选项标记的价值属性。 我把自定义属性“数据选择”这样的计算。

QUERY:我现在面临的一个问题,同时提交与页面上的多个选择的形式(后转换成结构UL-LI)。

分析:

  1. 虽然默认试图选择 - 选项的结构,我得到下面附加的表单提交的URL,而不从多个下拉菜单中更改任何值的参数。 https://www.google.com/?abc=1&def=1&xxx=1 。 而且你可以在后面的URL看到“?” 存在与这是默认选择的值的默认值“1”来NAME属性。

  2. 现在用我的函数(SELECT-OPTIONS转换成UL-LIS)后,我下面#1,我发现虽然我们并没有改变从下拉列表中值它的行为不端。 如果我提交表单,而不改变从下拉菜单抵达这个参数附加到URL中的价值。 恳请在#1本>>比较URL https://www.google.com/?abc=0&def=0&xxx=0 。 这里选择了默认已通过配置通过。 <script>$('select').customSelect({selected: '2',alignRight: 'true'});</script> 配置参数“ 中选择了 ”给定值“2”。 因此,在默认情况下第二个李应选择,如果我们不从价值下拉“0”(零)在#2的URL改变来代替。

我需要帮助来获取默认值!

下面是2个的代码片段和

HTML

<form method="get" action="http://google.com">
    <select name="abc">
        <option value="1">first</option>
        <option value="2">second</option>
        <option value="3">third</option>
    </select>
    <br><br><br><br><br><br>
    <select name="def">
        <option value="1">first</option>
        <option value="2">second</option>
        <option value="3">third</option>
    </select>
    <br><br><br><br><br><br>
    <select name="xxx">
        <option value="1">first</option>
        <option value="2">second</option>
        <option value="3">third</option>
    </select>
    <input type="submit" value="submit">
</form>
<script>
    $('select').customSelect({
        selected: '2',
        alignRight: 'true'
    });
</script>

JS

(function ($) {

    $.fn.customSelect = function( options ) {
        var settings = $.extend({
            //mainWidth: '200', 
            selected: '0',
            alignRight: 'false',
        }, options );

        return this.each(function() {
            var el          = $(this);
            var name        = el.prop('name');

            var optionTag   = el.children();
            var wrapperDIV  = $('<div class="customSelect"/>');
            var newDIV      = $('<div class="custom-select"/>');
            var inputTag    = $("<input name='"+name+"' type='text' readonly='readonly' />").hide();
            var inputDummy  = $("<div class='input-dummy'/>");
            var valueHolder = $('<div class="value-holder clearfix"/>');
            var ULTag       = $('<ul class="clearfix"/>');
            var spanTag     = '<span/>'

            el.wrap(wrapperDIV);
            el.parent().append(newDIV);

            newDIV.append(valueHolder);
            valueHolder.append(spanTag);
            valueHolder.append(inputTag);
            valueHolder.append(inputDummy);
            newDIV.append(ULTag);


            optionTag.each(function(){
                ULTag.append("<li data-selected='"+$(this).val()+"'>"+$(this).text()+"</li>");
            }).end().remove();

            var valDefault  = $('li').eq(settings.selected - 1).val();
            var textDefault = $('li').eq(settings.selected - 1).text();
            $(inputTag).val(valDefault);
            $(inputDummy).text(textDefault);

            valueHolder.click(function(){
                $(this).next().toggle();
            });

            ULTag.each(function(){
                $('li',this ).click(function(){
                    $(this).each(function(){
                        $(this).addClass('active').siblings().removeClass('active');
                        var x = $(this).data('selected');
                        var y = $(this).text();
                        $(inputTag).val(x);
                        $(inputDummy).text(y);
                        $(this).parent().hide();
                    });
                });
            });

            if(settings.selectorRight == 'true'){
                inputDummy.css('float', 'right');
                //valueHolder.css('float', 'right');
            }
            else{
                inputDummy.css('float', 'left');
                //valueHolder.css('float', 'left');
            }

            var woVH = valueHolder.width();
            inputDummy.width(woVH-20);
            ULTag.width(woVH);


        });
    };

}( jQuery ));

的jsfiddle

Answer 1:

你需要改变你的线路

var valDefault  = $('li').eq(settings.selected - 1).val();
var textDefault = $('li').eq(settings.selected - 1).text();

var valDefault = $(optionTag).eq(settings.selected - 1).val();
var textDefault = $(optionTag).eq(settings.selected - 1).text();

如你选择的nth li每个页面上的时间要素。 看看我的控制台开启公测小提琴,会带您明白我的意思。

演示: http://jsfiddle.net/robschmuecker/358p1816/1/



文章来源: Custom SelectBox (UL-LI) with same functionality in HTML FORM