문제

버튼이 많고 다른 버튼을 클릭하면 다른 이미지와 텍스트가 나타납니다. 나는 내가 원하는 것을 달성 할 수 있지만 코드는 너무 길어서 매우 반복적으로 보입니다. 예를 들어:

   var aaClick = false;
    $("aa").observe('click', function() {
        unclick();
        $('characterPic').writeAttribute('src',"aa.jpg");
        $('characterBio').update("aatext");
        $('aa').setStyle({ color: '#FFFFFF' });
        aaClick = true;
    });

    $("aa").observe('mouseover', function() {
        if (!aaClick) $('aa').setStyle({ color: '#FFFFFF' });
    });

    $("aa").observe('mouseout', function() {
        if (!aaClick) $('aa').setStyle({ color: '#666666' });
    });

    function unclick() {
         aaClick = false;
         $('aa').setStyle({ color: '#666666' });
    }

BB, CC 등과 마찬가지로 새 버튼을 추가 할 때마다 Empick 기능에도 추가해야합니다. 이것은 꽤 성가신 일이며 Google을 구하려고했는데, 나열된 모든 항목을 클릭하는 것이 관찰되었다는 것을 알았으므로 다른 버튼을 클릭 할 때 원하는 것이 버튼 업이 포함되어 있기 때문에 여전히 알 수 없었습니다.

다른 ID를 취하지 만 똑같은 일을하는 일반적인 기능 만있는 방법이 있습니까? 내가 볼 수있는 것에서 AA를 다른 ID로 바꿀 수 있다면 많은 코드를 줄일 수 있습니다. 감사!!!

도움이 되었습니까?

해결책

등록하려는 DIV의 이름을 간단히 전달할 수있는 함수로 모든 것을 빌드하십시오. .jpg 이름과 일치하는 한 작동해야합니다.

var clicks = []
function regEvents(divName) {
    $(divName).observe('click', function() {
        unclick(divName);
        $('characterPic').writeAttribute('src',divName+".jpg");
        $('characterBio').update(divName"text");
        $(divName).setStyle({ color: '#FFFFFF' });
        clicks[divName] = true

    });

    $(divName).observe('mouseover', function() {
        if (!clicks[divName]) $(divName).setStyle({ color: '#FFFFFF' });
    });

    $(divName).observe('mouseout', function() {
        if (!clicks[divName]) $(divName).setStyle({ color: '#666666' });
    });
}
function unclick(divName) {
     clicks[divName] = false;
     $(clicks[divName]).setStyle({ color: '#666666' });
}

다른 팁

이벤트 대표단. 모든 버튼에 클래스를 제공합니다 (예 : yourButtonClass), 그 다음에...

var clicks = [];
$$('.yourButtonClass').each(function(button) {
    clicks.push(button.id);
});
$(document).observe('click', function(e) {
    // If your click registered on an element contained by the button, this comes in handy...
    var clicked = e.element().up('.yourButtonClass') || e.element();

    if(clicked.hasClassName('.yourButtonClass')) {
        unclick();
        $('characterPic').writeAttribute('src', clicked.id + '.jpg');
        $('characterBio').update(clicked.id + 'text');
        $(clicked).setStyle({ color: '#FFFFFF' });
        clicks[clicked.id] = true;
    }
});

등등...

이벤트 핸들러는 이벤트 대상으로 설정 될 인수를 가질 수 있습니다. 그런 다음 동일한 기능을 재사용 할 수 있습니다.

var clickedHandler = function(element) { 
  $(element).addClass("selected");
};
$("aa").observe('click', clickedHandler);
$("bb").observe('click', clickedHandler);

또한 CSS 스타일링에 필사적으로 필요합니다. 내 참조하십시오 대답 이전 질문에는 다른 이벤트의 패턴을 재사용 할 수 있습니다.

버튼이 공통 컨테이너를 공유합니까? 그런 다음 다음 코드가 작동합니다.

$(container).childElements().each(function(element) {
    $(element).observe('click', function () { … });
    …
});

또는이를 수행 할 수도 있습니다.

["aa", "bb", "cc"].each(function(element) { … same code … });
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top