나는 화면에 같은 위젯이 3 개 있고, 사용자가 화면에서 이동하고 화면에 배치 할 수있는 컨텐츠가있는 3 div 태그와 같은 위젯이 있습니다. iGoogle이했던 것과 조금 같습니다. 기본적으로 화면에는 동일한 위젯을 0 개 이상 가질 수 있습니다.jQuery의 가장 가까운 find 혼란
ID 대신 HTML에서 클래스를 사용하여이 작업을 수행 할 수 있습니다. 나는이 위젯이있는 경우
<div class="widget_1">
<div class="widget_header_1"></div>
<div class="widget_sub_header_1"></div>
<div class="widget_content_1"></div>
<div class="widget_footer_1"></div>
<div>
따라서, 사용자가 클래스 widget_1
, 2 위젯이있을 것이다 화면 즉 위의 HTML 두 번 HTML 소스에있을 것입니다. 어쨌든
, 나는 즉, 위젯의 content
섹션에 데이터를 추가하는 위젯의 sub_header에있는 버튼을 가지고 난의 버튼을 클릭하면, 같이 잘 작동
$('.my_button').live('click',function() {
get_data($(this));
});
처음에는 widget_1
, 그 내용 만 변경됩니다. 두 번째 widget_1
버튼을 클릭하면 콘텐츠가 변경되고 다른 widget_1
의 콘텐츠에는 영향을 미치지 않습니다.
$(this).closest('.widget_1').find('.widget_content_1').empty().append(some_data_here);
, 나는 버튼이 위젯의 sub_header
에 클릭 내용에 로딩 이미지를 앞에 추가하려면, 그래서 시도 :
$(this).closest('.widget_1').find('.widget_content_1').prepend("<img class='imgLoading' src='/img/loading_white_32.gif'></img>");
이것은 단지 클릭 한 버튼에 위젯의 로딩 이미지를 표시 점에서 작동하지만 화면에 2 widget_1
년대이 경우는 클릭 widget_1
2 개 이미지를 표시하고, 5를 표시합니다 클릭 한 이미지를 0 개 화면에 widget_1
이 있으면입니다.
왜 그런 일이 발생합니까?
화면에 widget_1
이 몇 개 있더라도 클릭 한 widget_1
에로드 이미지 1 개만 표시되어야합니다.
나는 이것을 설명하기가 어렵습니다. 코드가 예상대로 작동해야합니다. 간단한 [피들] (http://jsfiddle.net/)에서 문제를 재현 할 수 있습니까? –
나는 바이올린을 만들었지 만 예상대로 작동하고 있습니다 ... http : // jsfiddle.net/rSN5w/2/ – oshirowanen
'live()'가 모든 위젯들로부터'click' 이벤트를받을 위임 된 핸들러를 인스톨하기 때문에 위젯 당 한번'click' 핸들러를 바인딩하는 것이 필요하지 않을 수 있습니다. 즉,'$ ('. my_button'). live (..)'행이 한 번만 실행되도록해야합니다. –