[jquery] jQuery를 사용하여 드롭 다운 목록을 열 수 있습니까?

HTML의 드롭 다운 목록 :

<select id="countries">
<option value="1">Country</option>
</select>

목록을 열고 싶습니다 (왼쪽 클릭과 동일). JavaScript (또는 좀 더 구체적으로 jQuery)를 사용하여 가능합니까?



답변

당신은 쉽게 할 수 요소에 클릭을 시뮬레이션 하지만,에 클릭하면 <select>드롭 다운을 열 수 없습니다.

다중 선택을 사용하는 것은 문제가 될 수 있습니다. 필요에 따라 확장 및 축소 할 수있는 컨테이너 요소 내부의 라디오 버튼을 고려해야합니다.


답변

나는 똑같은 것을 찾으려고했지만 실망했다. 선택 상자의 속성 크기를 변경하여 열리는 것처럼 보입니다.

$('#countries').attr('size',6);

그리고 완료되면

$('#countries').attr('size',1);


답변

나는 같은 문제를 만났고 해결책이 있습니다. “select”요소를 마우스로 클릭하는 것을 에뮬레이트하는 ExpandSelect ()라는 함수 <select>size속성 을 설정하여 한 번에 여러 옵션을 볼 수 있고 절대적으로 위치 하는 또 다른 요소를 생성하여 수행 합니다. Chrome, Opera, Firefox, Internet Explorer 등 모든 주요 브라우저에서 테스트되었습니다. 작동 방식에 대한 설명과 여기 코드 :

편집 (링크가 끊어짐) .

Google 코드에서 프로젝트를 만들었습니다. 거기에서 코드를 찾으십시오.

http://code.google.com/p/expandselect/

스크린 샷

클릭을 에뮬레이션 할 때 GUI에 약간의 차이가 있지만 실제로는 중요하지 않습니다. 직접 확인해보십시오.

마우스 클릭시 :

MouseClicking
(출처: googlecode.com )

클릭을 에뮬레이션 할 때 :

EmulatingClicking
(출처: googlecode.com )

프로젝트 웹 사이트의 더 많은 스크린 샷, 위 링크.


답변

이것은 바로 위의 답변에서 뽑아 낸 것이며 옵션의 길이 / 수를 사용하여 실제로 얼마나 많은 옵션이 있는지 확인합니다.

누군가가 필요한 결과를 얻는 데 도움이되기를 바랍니다.

    function openDropdown(elementId) {
        function down() {
            var pos = $(this).offset(); // remember position
            var len = $(this).find("option").length;
                if(len > 20) {
                    len = 20;
                }

            $(this).css("position", "absolute");
            $(this).css("zIndex", 9999);
            $(this).offset(pos);   // reset position
            $(this).attr("size", len); // open dropdown
            $(this).unbind("focus", down);
            $(this).focus();
        }
        function up() {
            $(this).css("position", "static");
            $(this).attr("size", "1");  // close dropdown
            $(this).unbind("change", up);
            $(this).focus();
        }
        $("#" + elementId).focus(down).blur(up).focus();
    }


답변

이것은 그것을 다룹니다.

 var event;
 event = document.createEvent('MouseEvents');
 event.initMouseEvent('mousedown', true, true, window);
 countries.dispatchEvent(event); //we use countries as it's referred to by ID - but this could be any JS element var

예를 들어 키 누르기 이벤트에 바인딩 될 수 있으므로 요소에 포커스가있을 때 사용자가 입력 할 수 있으며 자동으로 확장됩니다.

–문맥–

  modal.find("select").not("[readonly]").on("keypress", function(e) {

     if (e.keyCode == 13) {
         e.preventDefault();
         return false;
     }
     var event;
     event = document.createEvent('MouseEvents');
     event.initMouseEvent('mousedown', true, true, window);
     this.dispatchEvent(event);
 });


답변

간단하고 쉬운 방법입니다.

function down(what) {
  pos = $(what).offset();  // remember position
  $(what).css("position","absolute");
  $(what).offset(pos);   // reset position
  $(what).attr("size","10"); // open dropdown
}

function up(what) {
$(what).css("position","static");
$(what).attr("size","1");  // close dropdown
}

이제 이렇게 DropDown을 호출 할 수 있습니다.

<select onfocus="down(this)" onblur="up(this)">

나를 위해 완벽하게 작동합니다.

페이지에서 다른 요소의 위치에 문제가 없기 때문에 더 좋을 것입니다.

function down(was) {
a = $(was).clone().attr('id','down_man').attr('disabled',true).insertAfter(was);
$(was).css("position","absolute").attr("size","10");
}

function up(was) {
$('#down_man').remove();
$(was).css("position","static");
$(was).attr("size","1");
}

ID를 고정 값으로 변경하십시오 mybe 똑똑하지는 않지만 idee를 보길 바랍니다.


답변

자바 스크립트가 요소를 “클릭”하는 것은 불가능합니다 (u는 첨부 된 onclick 이벤트를 할 수는 있지만 말 그대로 클릭 할 수는 없습니다).

목록의 모든 항목을 보려면 다음과 같이 목록을 목록으로 만들고 multiple크기를 늘립니다.

<select id="countries" multiple="multiple" size="10">
<option value="1">Country</option>
</select>