2016-11-30 1 views
0

여기에 내가 사용하려고하는 js 코드가 있습니다. 나는 같은 코드가 반복되는 것을 싫어하고 더 나은 방법으로 이것을하도록 자신을 도울 수 없다.코드 반복을 피하기 위해 변수를 선언하는 더 좋은 방법은 무엇입니까?

$(function(){ 
    $('[data-behavior~=quick-reject]').on("click", function(){ 
    var form = $(this).closest("[data-behavior~=modal-footer]").find("form"); 
    var some_action = form.find("#some_actions").val(); 
    var some_reasons = form.find("[data-behavior~=escalation-reason-select-box]"); 

    if((some_reasons.val() === "") && (some_action === "reject")){ 
     var errorReason = "Please select a reason"; 
     form.addClass("error"). 
     parent(). 
     find("div.error"). 
     html(errorReason); 
    }else{ 
     form.submit(); 
    } 
    }); 

    $(document).on("change", "#some_actions", function(){ 
    var form = $(this).closest("[data-behavior~=modal-footer]").find("form"); 
    var some_action = form.find("#some_actions").val(); 
    var some_reasons = form.find("[data-behavior~=escalation-reason-select-box]"); 

    if(some_action === "verify"){ 
     some_reasons.hide(); 
    }else{ 
     some_reasons.show(); 
    } 
    }); 
}); 
+0

코드가 동일하지 않습니다. vs change some_actions를 클릭하면 코드가 달라집니다. change 이벤트는 동일한 코드를 사용하는 것을 정말로 좋아하지 않는다면 form/form.find 대신 "this"를 사용할 수 있습니다. 그러나 실제 * actions *는 반복되지 않으며, 동작 할 요소 만 가져옵니다. –

답변

0

작은 유틸리티 기능을 만들 수 있습니다.

function getVars(that) { 
    var form = $(that).closest("[data-behavior~=modal-footer]").find("form"); 
    return { 
    form: form, 
    some_action: form.find("#some_actions").val(), 
    some_reasons: form.find("[data-behavior~=escalation-reason-select-box]") 
    } 
} 

$('[data-behavior~=quick-reject]').on("click", function(){ 
    var v = getVars(this); 
    if((v.some_reasons.val() === "") && (v.some_action === "reject")){ 
     var errorReason = "Please select a reason"; 
     v.form.addClass("error"). 
     parent(). 
     find("div.error"). 
     html(errorReason); 
    }else{ 
     v.form.submit(); 
    } 
}); 

$(document).on("change", "#some_actions", function(){ 
    var v = getVars(this); 
    if(v.some_action === "verify"){ 
     v.some_reasons.hide(); 
    }else{ 
     v.some_reasons.show(); 
    } 
}); 
+0

(Y) 매력처럼 작동했습니다! –

관련 문제