2011-08-29 45 views
0

我期待創造,我把參數傳遞,以減少我的整體的js膨脹抽象的jQuery的對話功能。我的JavaScript是目前充滿象這樣的例子:抽象jquery的對話框調用,以減少臃腫

$(".claim_issue_lb").click(function (e) { 

    $(function() { 

     $("#dialog-claim").dialog({ 
      resizable: false, 
      height: 240, 
      modal: true, 
      buttons: { 
       "Claim Issue": function() { 
        ProcessDealerAction("claim"); //function to be called upon success 
        $(this).dialog("close"); 
       }, 
       Cancel: function() { 
        $(this).dialog("close"); 
       } 
      } 
     }); 

    }); 
}); 

爲了解決這個問題,我創建了以下內容:

function LoadDialog(target, height, confirm_button, function_call) { 

$(target).dialog({ 
    resizable: false, 
    height: height, 
    modal: true, 
    buttons: { 
     confirm_button: function() { 
      function_call; 
      $(this).dialog("close"); 
     }, 
     Cancel: function() { 
      $(this).dialog("close"); 
     } 
    } 
}); 

}

具有能夠減少我的對話框調用的希望以下例子:

$(".claim_issue_lb").click(function (e) { 

    LoadDialog("#dialog-claim", 240, "Claim Issue", ProcessDealerAction("claim")); 

}); 

它似乎運作良好,除了confi RM對話框彈出,然後運行本身沒有任何人點擊「是做」或「取消」,然後在對話框自動關閉。

我不能確定如何解決這個問題,或者如果我的整個方法是從根本上有缺陷。

+0

我們可以看到更多的代碼?您發佈的內容不允許我們幫助解決您遇到的問題。 – rlemon

+0

@rlemon。它looksl IKE他試圖通過'ProcessDealerAction'作爲函數字面,而是正在通過調用的結果。檢查我的答案。 –

回答

1

LoadDialog("#dialog-claim", 240, "Claim Issue", ProcessDealerAction("claim"));

將立即執行ProcessDealerAction。你需要在這裏通過function,而不是結果。

function LoadDialog(target, height, confirm_button, function_call, function_args) { 
... 
LoadDialog("#dialog-claim", 240, "Claim Issue", ProcessDealerAction, ["claim"]); 

LoadDialog("#dialog-claim", 240, "Claim Issue", (new function(){ProcessDealerAction("claim"));}))

將讓你更接近,你需要的人。您還需要正確調用回調。

confirm_button: function() { 
      function_call(); 
      $(this).dialog("close"); 
     }, 

,或者如果你決定在args分別傳遞,而不是需要匿名函數:

confirm_button: function() { 
      function_call.apply(this, [function_args]); 
      $(this).dialog("close"); 
     }, 
+0

我試圖底部的方法,它仍然自動運行。我會在第一名的工作。謝謝。 – Ian

+0

第二解決方案嘗試function_call.apply(這一點,[function_args])我不知道爲什麼,但是這已經在過去的工作對我來說? – rlemon

+0

@rlemon你的建議做到了。其他方法要麼是拋出格式錯誤,要麼仍然沒有停頓地運行。謝謝! – Ian