2010-12-15 3 views
0

일부 json을 수행하고 버튼을 비활성화하기 전에 이전에 비활성화되었을 수있는 다른 버튼을 활성화하기 만하면됩니다. 나는 분명히 아직 얻지 못하는 콜백과 관련이 있다고 생각한다. 아래의 코드에서 getJSON을 실행하기 전에 클릭 한 버튼이 비활성화되지 않습니다.jquery - 콜백 101

$(".btnUseProduct").live("click", function(e) { 

    var clickedId = $(this).attr('id'); 
    var provisioning_id = clickedId.split("^")[0]; 
    var entity_id = clickedId.split("^")[1]; 
    var entity = clickedId.split("^")[2]; 

    showUseButtons(function(){   

       $(this).attr({'disabled':'disabled','value':'Used'}); //doesn't work 
       $.getJSON("/chinabuy-new/cfcs/services.cfc?method=update_provisioning&returnformat=json&queryformat=column",{"provisioning_id":provisioning_id,"entity_id":entity_id},function(res,code){       
       }); 
     }); 
    e.preventDefault(); 
}); 

function showUseButtons() { 
    $(".btnUseProduct").each(function(e) { 
     $(this).attr({'disabled':'disabled','value':'Used'}); 
    }); 
}  

답변

2

콜백은 다른 기능으로 전달하는 기능입니다. 그것을 전달하는 다른 함수는 호출해야합니다. 그렇지 않으면 쓸모가 없습니다. 위

function someFunctionThatCallsBack(someCallbackFunction) { 
    // do something 
    someCallbackFunction(); // calls the callback function 
} 

, 당신은 showUseButtons에 함수를 전달하는 -하지만 그 기능은 그냥 무시합니다. 그것은 당신이 거기에 넣는 것이 무엇이든 할 수 없도록 부름받지 않을 것입니다.

아마도 다음과 같은 것을 의미할까요?

function showUseButtons(callback) { 
    $(".btnUseProduct").each(function(e) { 
     $(this).attr({disabled: true, value:'Used'}); 
    }); 
    callback(); 
}  

또한, 함수 내부 컨텍스트 변경 (즉 this의 값이 다르다). 그래서 당신은 약간뿐만 아니라 코드를 변경해야합니다 :

var _this = this; // save the context - the clicked DOM element 
    showUseButtons(function(){   
      $(_this).attr({disabled:true, value:'Used'}); //doesn't work 
      $.getJSON("/chinabuy-new/cfcs/services.cfc?method=update_provisioning&returnformat=json&queryformat=column",{"provisioning_id":provisioning_id,"entity_id":entity_id},function(res,code){       
      }); 
    }); 
+0

을. 하지만 두 개의 단추가 모두 비활성화되어 있습니다. 클릭 된 항목 만 사용 중지해야합니다. 버튼 2 (클릭하지 않음) : <입력 ID = "224^9^제품"class = "btnUseProduct"type = "버튼"값 = "사용"> 버튼 2^제품 "class ="btnUseProduct "type ="button "value ="Use "> – Paul

+0

잠깐 ... 무슨 일이 벌어지고있는 것 같아 ... 잠깐만. showUseButtons 함수는 숨기지 않고 표시해야하므로이를 변경했습니다. 그러나 클릭 할 때 비활성화가 작동하지 않습니다. – Paul

+0

@Paul : DOM 요소 ID는 숫자로 시작하면 안되며 (잘못된 HTML 임) '^'가 포함되어서는 안됩니다. – sje397

-1

이 시도 ...이 정도 작동

$(".btnUseProduct").live("click", function(e) { 

     var clickedId = $(this).attr('id'); 
     var provisioning_id = clickedId.split("^")[0]; 
     var entity_id = clickedId.split("^")[1]; 
     var entity = clickedId.split("^")[2]; 

     showUseButtons(function(){   

        $(this).attr({'disabled':'disabled','value':'Used'}); //doesn't work 
        $.getJSON("/chinabuy-new/cfcs/services.cfc?method=update_provisioning&returnformat=json&queryformat=column",{"provisioning_id":provisioning_id,"entity_id":entity_id},function(res,code){    
     //give class name common for all buttons and make all to hide 
     $("input.button_class_names").css({'visibility' : 'visible'}); 
    //make ur pressed button visible like this   
clickedId.css({'visibility' : 'hidden'}); 
        }); 
      }); 
     e.preventDefault(); 
    }); 

    function showUseButtons() { 
     $(".btnUseProduct").each(function(e) { 
      $(this).attr({'disabled':'disabled','value':'Used'}); 
     }); 
    }