【问题标题】:.change() hide <select> .click() .show() <select>.change() 隐藏 <选择> .click() .show() <选择>
【发布时间】:2013-05-06 17:30:55
【问题描述】:

我想在选择一个选项后隐藏一个选择框并将值作为文本放置到位。这就是工作。接下来我需要的是,能够单击文本并再次显示选择框。现在不行。

有人知道该怎么做吗???请? :-D

<a>
  <select class="trigger">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
  </select>
</a> 
<a>
  <select class="trigger">
        <option value="a">a</option>
        <option value="b">b</option>
        <option value="c">c</option>
        <option value="d">d</option>
  </select>
</a>

<script>
$('.trigger').change( function() {
    var $tt = $(this).val();
    $(this).hide();
    $(this).parent("a").text($tt);
});
</script>

【问题讨论】:

    标签: jquery select hide show


    【解决方案1】:
    $(function () {
        $('.trigger').change(function () {
            var $tt = $(this).val();
            $(this).hide();
            // Don't use .text(), that will replace the <select> with the text
            $(this).parent("a").append($("<span/>", {
                text: $tt
            }));
        });
        $("a").click(function () {
            // If the select is hidden ...
            var $select = $(".trigger:hidden", $(this));
            if ($select.length) {
                // Remove the text field ...
                $("span", $(this)).remove();
                // and show the select
                $select.show();
            }
        });
    });
    

    FIDDLE

    【讨论】:

    • 对不起,这里不行。它在选择框前面添加文本(值)。所以我想我错过了一些东西。
    • 不是隐藏选择框吗?我不知道为什么。
    • 已修复。我有"div",它应该是"span"
    • 它在小提琴中起作用,你必须做一些不同的事情。在实际页面中,最好给a 标签一个类,这样您就可以将点击处理程序绑定到该类而不是所有锚。
    • 我已经从小提琴中复制了我的代码,以防万一出现编辑错误。
    【解决方案2】:

    以下是一个简单的解决方案(http://jsfiddle.net/h7ynd/):

    HTML

    <a>
      <select id="trigger1">
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
      </select>
    
    </a>
     <span id="label1"></span>
    
    <a>
      <select id="trigger2">
            <option value="a">a</option>
            <option value="b">b</option>
            <option value="c">c</option>
            <option value="d">d</option>
      </select>
       <span id="label2"></span>
    </a>
    

    jQuery

    $('#trigger1').change(function () {
        var $tt = $(this).val();
        $('#label1').text($tt )
        $(this).hide();
    });
    $('#label1').click(function () {
        $("#trigger1").show();
        $(this).text("");
    });
    
    $('#trigger2').change(function () {
        var $tt = $(this).val();
        $('#label2').text($tt )
        $(this).hide();
    });
    $('#label2').click(function () {
        $("#trigger2").show();
        $(this).text("");
    });
    

    可以修改选择器以使用类而不是 id。

    【讨论】:

    • 谢谢你的回答,但我使用的是 adeneo
    • 我会说,这是一个正确的选择。祝你的项目好运! Rgds,
    【解决方案3】:

    我建议:

    $('select').change(function () {
        var self = $(this);
        self.addClass('edited').next('span').text(self.val());
    });
    
    $('#optionList span').click(function () {
        $(this).prev('select').removeClass('edited').focus();
    });
    

    使用以下 CSS:

    select.edited,
    select + span {
        display: none;
    }
    
    #optionList select.edited + span {
        display: inline-block;
    }
    

    和 HTML(根据需要更改):

    <ul id="optionList">
        <li>
            <select name="one">
                <option>One</option>
                <option>Two</option>
                <option>Three</option>
                <option>Four</option>
            </select> <span></span>
    
        </li>
    </ul>
    

    JS Fiddle demo.

    不过,您可以将 CSS 用于大部分功能:

    <ul id="optionList">
        <li>
            <select name="one">
                <option>One</option>
                <option>Two</option>
                <option>Three</option>
                <option>Four</option>
            </select><span></span>
    
        </li>
    </ul>
    

    使用 CSS:

    select {
        border: 0 none transparent;
        cursor: pointer;
        -webkit-appearance: none;
    }
    
    select:focus + span::after {
        color: #000;
    }
    
    span::after {
        color: #999;
        content:'\25bc'; /* unicode down-pointing arrow: '▼' */
    }
    

    JS Fiddle demo.

    参考资料:

    【讨论】:

    • 感谢您的回答。我尝试了第一个,但不知何故不起作用。将使用 adeneo 之一。
    • 嗯,它在链接的演示中工作;你还记得改变 CSS 和 jQuery 中的选择器吗?
    • 哈哈哈,这个不错!我只是复制粘贴你的例子,看看它是否有效。对不起...
    【解决方案4】:

    试试:

    $(document).ready(function(){
        $('option').click(function(){
          var value = $(this).attr('value');
          $(this).parents('a').html(value);
        });
      });
    

    编辑:我认为您的问题实际上可能是您没有将 jQuery 包装在 doc 中准备好了吗?我已将其添加进去,但我认为您的原始方法可能适用于准备好的文档。

    【讨论】:

    • 请不要使用.attr('value');。要么做.prop('value')要么.val()
    • 感谢 Ilia G 的建议!以后会做的。
    【解决方案5】:

    使用text()html() 将替换父锚点的内容,完全删除选择下拉菜单,而您真正想做的只是隐藏它:

    $('.trigger').on('change', function() {
        var elem = $(this),
            txt  = $('<span />', {text: this.value});
    
        elem.hide().before(txt);
        txt.on('click', function() {
            elem.show();
            $(this).remove();
        });
    });
    

    FIDDLE

    【讨论】:

    • 这可能是最好的一个:简单而优雅的解决方案。 Rgds,
    • 现在唯一的问题是,当您单击时,您不能立即使用相同的值。在再次选择之前,您需要先选择另一个。你能帮忙吗?
    • @user2375199 - 这就是更改事件的工作方式,只有在发生更改时才会触发。如果您两次选择相同的选项,则不会第二次触发更改事件。您可以尝试改用单击,这可能会解决问题,但是使用键盘更改选择不再有效,只能单击鼠标。
    • 通过添加一个额外的 并更改了 elem.show();到 elem.show().val("1");所以现在它回到选项 1。不是我想要的,但没关系
    猜你喜欢
    • 2011-06-07
    • 2012-01-15
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多