33

これは簡単な質問かもしれませんが、そうでないかもしれません。幅をハードコードする選択ボックスがあります。120px と言います。

<select style="width: 120px">
  <option>REALLY LONG TEXT, REALLY LONG TEXT, REALLY LONG TEXT</option>
  <option>ABC</option>
</select>

ユーザーがテキスト全体を表示できるように、2 番目のオプションを表示できるようにしたいと考えています。

他のすべてのように。これは Firefox では問題なく動作しますが、Internet Explorer6 では動作しません。

4

13 に答える 13

13

次のコードで問題を修正しました。

<div style="width: 180px; overflow: hidden;">
   <select style="width: auto;" name="abc" id="10">
     <option value="-1">AAAAAAAAAAA</option>
     <option value="123">123</option>
   </select>
</div>

それが役に立てば幸い!

于 2009-02-19T10:02:09.163 に答える
12

fixed-with に既存のオプションがあり、<select>プログラムで幅を変更したくない場合は、少しクリエイティブにならない限り、うまくいかない可能性があります。

  • title各オプションに属性を設定してみてください。これは非標準の HTML ですが (この軽微な違反を気にする場合)、IE (および Firefox も) は、マウス ホバー時にマウス ポップアップにテキスト全体を表示します。
  • ユーザーが何かを選択したときに、JavaScript を使用して、配置された DIV にテキストを表示できます。私見これはあまり良い方法ではありません.JavaScriptがまったく機能する必要があり、何かが選択された後にのみ機能します-値が変更される前は、選択ボックスに対してイベントは発生しません.
  • 選択ボックスはまったく使用しませんが、他のマークアップと CSS を使用してその機能を実装します。私のお気に入りではありませんが、言及したかったのです。

後で JavaScript を使用して長いオプションを追加する場合は、こちらを参照してください: IE で HTML の「選択」ボックスを動的に更新する方法

于 2008-11-16T16:18:57.723 に答える
4

これは、探している動作のほとんどを模倣しています。

  <!--

     I found this works fairly well.

  -->

  <!-- On page load, be sure that something else has focus. -->
  <body onload="document.getElementById('name').focus();">
  <input id=name type=text>

  <!-- This div is for demonstration only.  The parent container may be anything -->
  <div style="height:50; width:100px; border:1px solid red;">

  <!-- Note: static width, absolute position but no top or left specified, Z-Index +1 -->
  <select
   style="width:96px; position:absolute; z-index:+1;"
   onactivate="this.style.width='auto';"
   onchange="this.blur();"
   onblur="this.style.width='96px';">
  <!-- "activate" happens before all else and "width='auto'" expands per content -->
  <!-- Both making a selection and moving to another control should return static width -->

  <option>abc</option>
  <option>abcdefghij</option>
  <option>abcdefghijklmnop</option>
  <option>abcdefghijklmnopqrstuvwxyz</option>

  </select>

  </div>

  </body>

  </html>

これにより、キーを押す動作の一部が上書きされます。

于 2011-02-17T20:31:51.713 に答える
4

divに配置してidを与える

<div id=myForm>

次に、それに合わせて非常に単純なcssを作成します。

#myForm select { 
width:200px; }

#myForm select:focus {
width:auto; }

それだけです。

于 2011-09-02T14:51:14.037 に答える
4

select で min-width と max-width を同じ値に設定し、次に select:focus を auto に設定して、ブートストラップ ページで修正しました。

select {
  min-width: 120px;
  max-width: 120px;
}
select:focus {
  width: auto;
}
<select style="width: 120px">
  <option>REALLY LONG TEXT, REALLY LONG TEXT, REALLY LONG TEXT</option>
  <option>ABC</option>
</select>

于 2015-06-02T20:25:41.433 に答える
1

私がIEの既存のサイトに使用した簡単な解決策eventListenerは次のとおりです(jQueryを使用しますが、JSをよく知らない場合はコードを投稿できます)。

if (jQuery.browser.msie) {
  jQuery('#mySelect').focus(function() {
    jQuery(this).width('auto');
  }).bind('blur change', function() {
    jQuery(this).width('100%');
  });
};

もちろん、変数 ( var cWidth = jQuery('#mySelect').width();) を使用して以前の幅を格納しますが、期待どおりに機能するために必要なことはこれだけです。

于 2010-10-05T22:13:03.863 に答える
1

サンプル

function PopulateDropdown() {
    $.ajax({
        type: "POST",
        url: "../CommonWebService.asmx/GetData",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            $("select[id^='MyDropDown']").empty();
            $.each(msg.d, function () {
                $("select[id^='MyDropDownSelect']").append($("<option></option>").val(this['IdIndexDataType']).html(this['DataTypeName']));
            }); 
            $("select[id^='MyDropDown']").css("width", "auto");  
        },
        error: function (e1) {
            alert("Error - " + e1.toString());
        }
    });
}

以下のコードは、データをドロップダウンリストに挿入した後にこのコードを追加することで、ドロップダウンリストの幅の問題を解決します。

$("select[id^='MyDropDown']").css("width", "auto");
于 2012-05-30T15:18:41.340 に答える
1

さて、このオプションはかなりハックですが、うまくいくはずです。

$(document).ready( function() {
$('#select').change( function() {
    $('#hiddenDiv').html( $('#select').val() );
    $('#select').width( $('#hiddenDiv').width() );
 }
 }

もちろん、隠しdivが必要です。

<div id="hiddenDiv" style="visibility:hidden"></div>

ああ、あなたはjQueryが必要になります

于 2008-11-16T16:23:31.350 に答える
0

そのようになるように、cychanのソリューションを改善しました:

<html>
<head>

<style>
    .wrapper{
        display: inline;
        float: left; 
        width: 180px; 
        overflow: hidden; 
    }
    .selectArrow{
        display: inline;
        float: left;
        width: 17px;
        height: 20px;
        border:1px solid #7f9db9;
        border-left: none;
        background: url('selectArrow.png') no-repeat 1px 1px;
    }
    .selectArrow-mousedown{background: url('selectArrow-mousedown.png') no-repeat 1px 1px;}
    .selectArrow-mouseover{background: url('selectArrow-mouseover.png') no-repeat 1px 1px;}
</style>
<script language="javascript" src="jquery-1.3.2.min.js"></script>

<script language="javascript">
    $(document).ready(function(){
        $('#w1').wrap("<div class='wrapper'></div>");
        $('.wrapper').after("<div class='selectArrow'/>");
        $('.wrapper').find('select').mousedown(function(){
            $(this).parent().next().addClass('selectArrow-mousedown').removeClass('selectArrow-mouseover');
        }).
        mouseup(function(){
            $(this).parent().next().removeClass('selectArrow-mousedown').addClass('selectArrow-mouseover');
        }).
        hover(function(){
            $(this).parent().next().addClass('selectArrow-mouseover');
        }, function(){
            $(this).parent().next().removeClass('selectArrow-mouseover');
        });

        $('.selectArrow').click(function(){
            $(this).prev().find('select').focus();
        });

        $('.selectArrow').mousedown(function(){
            $(this).addClass('selectArrow-mousedown').removeClass('selectArrow-mouseover');
        }).
        mouseup(function(){
            $(this).removeClass('selectArrow-mousedown').addClass('selectArrow-mouseover');
        }).
        hover(function(){
            $(this).addClass('selectArrow-mouseover');
        }, function(){
            $(this).removeClass('selectArrow-mouseover');
        });
    });

</script>
</head>
<body>
    <select id="w1">
       <option value="0">AnyAnyAnyAnyAnyAnyAny</option>
       <option value="1">AnyAnyAnyAnyAnyAnyAnyAnyAnyAnyAnyAnyAnyAny</option>
    </select>

</body>
</html>

CSS クラスで使用される PNG は、ここにアップロードされます...

そして、あなたはまだJQueryが必要です.....

于 2009-07-03T00:10:48.667 に答える
0

CSSのみを使用して解決することができます。選択するクラスを追加することにより

select{ width:80px;text-overflow:'...';-ms-text-overflow:ellipsis;position:absolute; z-index:+1;}
select:focus{ width:100%;}

詳細については、特定の項目のリスト ボックス スタイル (オプション) HTML を参照してください。

複数選択リスト ボックス

于 2012-09-27T06:40:29.050 に答える