jQuery를 사용하여 옵션을 선택하기 위해 추가 데이터 추가


139

아주 간단한 질문입니다.

나는 <select>이런 상자를 가지고있다

<select id="select">
    <option value="1">this</option>
    <option value="2">that</option>
    <option value="3">other</option>
</select>

선택한 값 (을 사용하여 $("#select").val())과 선택한 항목의 표시 값 (을 사용 하여 )을 가져올 수 있습니다 $("#select :selected").text().

그러나 <option>태그에 추가 값처럼 어떻게 저장할 수 있습니까? 나는 비슷한 것을 <option value="3.1" value2="3.2">other</option>하고 value2속성 의 값을 얻길 원합니다 (이 예제에서는 3.2).


선택 상자에 항목을 추가 하시겠습니까? 또는 한 번에 둘 이상을 선택하여 결과를 얻을 수 있기를 원하십니까?
zsalzbank

아니, 나는 단순히 <option> 태그에 value2 = ""가 있기를 원하지만 작동하지 않습니다.
jim smith

귀하의 질문은 명확하지 않습니다 (어쨌든 나에게). "선택 옵션에 다른 값을 저장"한다는 것은 무엇을 의미합니까? 선택에 새 옵션을 추가하길 원합니까? 열 때 사용자에게 표시됩니다.
Phrogz

15
논리 나 이성을 무시하지 않습니다. 나는 비슷한 질문 / 사례가 있으므로 선택 사이의 값을 비교하고 선택의 값 / 텍스트를 유지하면서 옵션의 텍스트를 다른 옵션에 저장할 수 있습니다. 아래 대답이 나타내는 것처럼 데이터를 통해 가능한 것 같습니다. 생각하지 않았다고해서 논리와 이성을 무시한다는 의미는 아닙니다. OP는 그가 올바른 방향으로 지적해야 할 정도로 충분한 질문이었습니다.
user1783229

1
data-anything 및 .data ( 'anything')를 사용하여 .value를 수행하는 모든 위치에 언제든지 추가 매개 변수를 추가 할 수 있습니다. value2 또는 좋아하는 것과 비슷한 것을 교환하십시오

답변:


320

HTML 마크 업

<select id="select">
  <option value="1" data-foo="dogs">this</option>
  <option value="2" data-foo="cats">that</option>
  <option value="3" data-foo="gerbils">other</option>
</select>

암호

// JavaScript using jQuery
$(function(){
    $('select').change(function(){
       var selected = $(this).find('option:selected');
       var extra = selected.data('foo'); 
       ...
    });
});

// Plain old JavaScript
var sel = document.getElementById('select');
var selected = sel.options[sel.selectedIndex];
var extra = selected.getAttribute('data-foo');

여기에 jQuery를 사용하여 작업 샘플로이를 참조하십시오 http://jsfiddle.net/GsdCj/1/은
: 여기에 일반 자바 스크립트를 사용하여 작업 샘플로이보기 http://jsfiddle.net/GsdCj/2/

HTML5의 데이터 속성 을 사용 하면 jQuery에서도 쉽게 액세스 할 수있는 구문 적으로 올바른 방식으로 요소에 추가 데이터를 추가 할 수 있습니다.


@ jimsmith 그렇습니다. (이 답변이 유용하다고 생각되면 투표하십시오. 문제가 가장 잘 해결되었다는 것을 발견 한 경우 "수락"으로 표시해야합니다.)
Phrogz

1
뭐? 아닙니다. HTML5 데이터 속성을 지원하는 모든 브라우저에서 작동합니다.
glomad

13
@ithcy 모든 브라우저는 마크 업에서 "유효하지 않은"속성을 지원하며 DOM을 통해 속성을 가져 오거나 설정합니다. HTML5 "데이터"속성은 이름 지정 체계가있는 사용자 정의 속성이며 합법적으로 선언하는 새로운 표준입니다.
Phrogz

@Phrogz 나는 이것을 알고있다. 유효하지 않은 속성을 "지원"하는 브라우저의 문제가 아니라 무시하는 문제입니다. 사용할 수있는 웹 브라우저를 작성하는 다른 방법은 없습니다. :) 데이터 속성을 "구문 적으로 유효한"것으로 부르는 것은 신축 적이라고 생각합니다. 상황에 따라 다릅니다. HTML5 doctype이 있다면 유효합니다. 그렇지 않으면 W3C 유효성 검사가 실패하고 실패하게됩니다.
glomad

@ithcy 그들은 그들과 함께 아무것도 특별한을 같이 브라우저가있는 한을 '무시',하지만 그들은 할 수 없습니다 그들은 완전히 사용할 수 있습니다로하는 한 그들을 무시 getAttribute(). 내 답변이 모든 브라우저에서 작동하지 않는다는 귀하의 초기 주장에 응답했습니다. 나는 그것이 '모든'브라우저에서 작동 할 것이라고 내 진술에 서있다 (이 경우 'all'의 꽤 관대 한 정의를 위해). jQuery를 지원하지만 HTML5가 아닌 doctype에서도 이러한 데이터 속성에서 작동하지 않는 브라우저를 보여 주시면 내 말을 먹을 것입니다.
Phrogz

5

나에게 새로운 속성을 만들고 싶은 것 같습니까? 당신은 원하십니까

<option value="2" value2="somethingElse">...

이렇게하려면 할 수 있습니다

$(your selector).attr('value2', 'the value');

그런 다음 검색하려면

$(your selector).attr('value2')

유효한 코드는 아니지만 작동합니다.


다른 방법은 $ (selector) .data ( 'value2', "your value") 및 $ (selector) .data ( 'value2')를 사용하여 검색하는 것입니다 ... 여전히 유효합니다.
mikesir87

글쎄, 원래 마크 업에 비표준 속성을 갖는 것은 구문 적으로 유효하지는 않지만 a) NS4 시절에는 이것에 문제가 있기 때문에 브라우저를 본 적이 없으며 b) DOM을 수정할 수 있다면 "구문 적으로 유효하지 않은"무언가를 만들어내는 것이 실제로인가?
Phrogz

예, 정말 ... 무효합니다. data- * 속성이 html5 표준에 정의되어있을 때 임의의 속성을 사용하는 이유는 무엇입니까?
stephenbayer

3
@stephenbayer가 언급했듯이 지금이 작업을 수행하는 올바른 방법은 html5 지원 data- * 속성을 사용하는 것입니다. 원래 2010 : 다시 대답 할 때 그 속성을 많이 사용에 / 정말 주위에 없었다
mikesir87


-1

HTML / JSP 마크 업 :

<form:option 
data-libelle="${compte.libelleCompte}" 
data-raison="${compte.libelleSociale}"   data-rib="${compte.numeroCompte}"                              <c:out value="${compte.libelleCompte} *MAD*"/>
</form:option>

쿼리 코드 : 이벤트 : 변경

var $this = $(this);
var $selectedOption = $this.find('option:selected');
var libelle = $selectedOption.data('libelle');

libelle.val () 또는 libelle.text () 요소를 가지려면


<form : option data-libelle-compte = "$ {compte.libelle} data-raison ="$ {compte.raison} "data-compte ="$ {compte.numero} "> <c : out value ="$ {compte.libelleCompte} MAD "/> </ form : option>
Fadid

-4

선택 옵션에 다른 값을 저장하려면

$("#select").append('<option value="4">another</option>')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.