2010-08-14 3 views
1

여러 개의 선택 목록이있는 페이지가 있고 jQuery의 .change() 함수를 사용하여 선택 목록이 변경 될 때 선택 항목 옆에있는 텍스트를 변경합니다 명부. 페이지가로드 될 때 이미 모든 범위에 텍스트가 있습니다 (텍스트는 각 범위마다 다릅니다). 문제는 페이지가 .change() 함수를로드 할 때 모든 선택 목록을 반복하여 모든 범위의 텍스트를 변경한다는 것입니다. 사용자가 목록에서 다른 항목을 선택할 때까지 스팬의 텍스트가 변경되는 것을 원하지 않습니다. 사용자가 선택한 항목을 변경하더라도 텍스트가 있는지 여부는 중요하지 않으므로 텍스트를 바꿀 때 텍스트를 바꿀 뿐이므로 선택하지 않아도됩니다. 페이지가로드됩니다. 그래서, 페이지를로드 할 때 .change() 함수가 실행을 멈추게하려면 어떻게해야합니까? 코드 :페이지로드시 jQuerys.change()가 실행되지 않도록 유지

JS/jQuery를

$(document).ready(function() { 
    $("select").change(function() { 
    var txt = $(this).val(); 
    $(this).next('span').text(txt); 
    }).trigger('change'); 
}); 

HTML (반복 횟수를) 도와

<select name="animal[]"> 
<option value="dog" selected="selected">dog</option> 
<option value="cat">cat</option> 
<option value="bird">bird</option> 
<option value="snake">snake</option> 
</select> 
<span class="out">text that shouldn't be replaced until user changes selected item</span> 

감사합니다!

.trigger('change') 

그것은 당신이 단지 바인딩 $("select").change(function() { ... }) 핸들러를 호출하는 무슨이다 :

답변

4

"변경"은 코드가 말하고 있기 때문에 을 트리거합니다!.trigger("change")을 호출하면 ''change '이벤트 처리기를 실행하십시오.'라고 표시됩니다. 그래서, 그것을 꺼내십시오.

이제 일이되면, 이유 코드는 방법은 <select> 요소의 설정이 정말 행동은 사용자가 수동으로 같은 변경을 할 때 있어야하는데 무엇을 반영하고 있는지 확인 아마이었다 작성되었습니다. 예를 들어 <select>이 특정 옵션으로 설정되어 있지 않으면 입력의 일부가 사용 중지되는 양식이있을 수 있습니다. 페이지로드시 "change"이벤트를 트리거함으로써 코드는 해당 규칙이 유효한지 확인할 수 있습니다. 방금 방아쇠를 당기면, 제대로 작동하지 않을 수도 있습니다. 그 핸들러는 매우 단순 해 보이기 때문에이 코드는 다른 곳에서 잘라 붙여 넣기 만하는 것이 문제 일 수도 있습니다.

+0

글쎄, 내가 바보처럼 보이게 만들었지 만 원래 문제없이 문제를 풀었을 때 추가 했어. 설명 주셔서 감사합니다! – Scott

5

당신은이 호출을 제거해야합니다. 기본 동작은 change 이벤트가 발생할 때까지 기다리는 것입니다 ... .trigger('change') 또는 (매개 변수 없음)은 change 이벤트를 시뮬레이트하여 해당 처리기를 작동시킵니다.

관련 문제