2009-12-12 3 views
1

백엔드 PHP 스크립트에 게시 할 값이있는 onclick 이벤트가 있습니다. 대화 상자 기능에서 가져 오는 방법을 모르겠습니다.대화 상자 함수에 onclick 변수를 가져 오는 방법

function reorder(job_index)//<--------this fella 
{ 
     $('#dialog').dialog('open'); 
} 
$(document).ready(function(){ 
    $(function() { 
     $("#dialog").dialog({ 
     bgiframe: true, 
     autoOpen: false, 
     height: 250, 
     width: 600, 
     modal: true, 
     buttons: { 
      'Yes, use the number above': function() { 
      var jobID=$("#jobnumber").val(); 
      $.post("rpc.php", {   
           job_index:job_index,// <-------to here   
           jobID:jobID, 
           method: "reorder" 
           }, 
    function(data,textstatus) 
     { 
     alert(data.message);  
     }, "json"); 
      }, 
      'No, create a new number for me': function() { 
       $(this).dialog('close'); 
     }, 
      Cancel: function() { 
       $(this).dialog('close'); 
      } 

     } 
    }); 
}); 
}); 

값은 job_index입니다. 어떤 팁?

감사

+0

팁 : 외부 '준비'기능 내에 중첩 된'읽기 '기능이 있습니다. 왜냐하면'$ (function() {'은'$ (document) .ready (function() {'와 동일하기 때문입니다.) –

+0

덕분에 – jason

답변

1

, 나는 모두 가게에 당신을 허용하고 인덱스를 검색합니다 하나의 기능을 사용하고 있습니다.

함수 index은 선언하고 다른 함수를 반환하여 closure을 생성합니다. 즉 변수 _index은 계속 사용할 수 있습니다 () (외부 프레임) 함수가 반환되면 변수가 스택 프레임 대신 힙에 할당 된 것처럼 생각합니다 (예 : , malloc-ed). 가능한 경우 함수의 마지막 행에있는 }();으로 인해 함수가 자체 호출하는 것을 볼 수 있습니다. 따라서 파싱하는 동안 즉시 반환됩니다.

index을 다시 호출하면 (공식적인 인수 인 하나의 형식 인수 인 ind을 호출합니다), 색인을 전달할 수 있으며 그렇게하면 함수는 _index 앞에서 언급 한 변수 ... 즉 외부 함수가 반환 된 후에도 사용할 수있는 변수입니다.

인수를 전달하지 않으면 (예 : index()과 같은 함수를 호출하는 경우) 함수는 저장된 변수 만 반환합니다. 이 배후의 논리는 매개 변수가 전달되지 않으면 실제 인수 값이 undefined이라는 것입니다. 따라서 함수는 값이 undefined인지 확인하고 허용되는 경우 변수를 반환합니다.

그리고 btw, ready 함수 내부에 중첩 된 ready 함수가 있습니다. 이는 $(function() {$(document).ready(function(){과 같기 때문입니다. 나는 아래의 코드에서이 고정 :

var index = function() { 
    var _index; 
    return function (ind) { 
     if (typeof ind !== "undefined") { 
      _index = ind; 
     } 
     return _index; 
    }; 
}(); 

function reorder(job_index) 
{ 
    index(job_index); 
    $('#dialog').dialog('open'); 
} 

$(function() { 
    $("#dialog").dialog({ 
     bgiframe: true, 
     autoOpen: false, 
     height: 250, 
     width: 600, 
     modal: true, 
     buttons: { 
      'Yes, use the number above': function() { 
       var jobID = $("#jobnumber").val(); 
       $.post("rpc.php", { 
        job_index: index(),     
        jobID: jobID, 
        method: "reorder" 
       }, 

       function (data, textstatus) { 
        alert(data.message); 
       }, 
       "json"); 
      }, 
      'No, create a new number for me': function() { 
       $(this).dialog('close'); 
      }, 
      Cancel: function() { 
       $(this).dialog('close'); 
      } 

     } 
    }); 
}); 

nickf이 언급 한 data 방법을 사용하는 것입니다 할 수있는 또 다른 방법. 이렇게하면 다음과 같이 요소의 일부로 직접 색인을 저장할 수 있습니다.

function reorder(job_index) 
{ 
    $('#dialog').data("job", job_index).dialog('open'); 
} 

$(function() { 
    $("#dialog").dialog({ 
     bgiframe: true, 
     autoOpen: false, 
     height: 250, 
     width: 600, 
     modal: true, 
     buttons: { 
      'Yes, use the number above': function() { 
       var jobID = $("#jobnumber").val(); 
       $.post("rpc.php", { 
        job_index: $("#dialog").data("job"),     
        jobID: jobID, 
        method: "reorder" 
       }, 

       function (data, textstatus) { 
        alert(data.message); 
       }, 
       "json"); 
      }, 
      'No, create a new number for me': function() { 
       $(this).dialog('close'); 
      }, 
      Cancel: function() { 
       $(this).dialog('close'); 
      } 

     } 
    }); 
}); 
+0

네가 작동하는 것을 알지 못했습니다. 작동합니까? – jason

+0

설명 게시 됨 –

0

당신은 요소에 대한 데이터가 전역 변수를 만들기 .data()

0

를 사용하는 등, 보관이 마지막 클릭 job_index를 저장하고 클릭 처리기에 거기에서 읽을 수 있습니다.

var last_job_index; 
function reorder(job_index) 
{ 
    last_job_index = job_index; 
    $('#dialog').dialog('open'); 
} 
//snip 
$.post("rpc.php", {      
    job_index: last_job_index, 
    jobID: jobID, 
    method: "reorder" 
}, 

경고 :이 아주 전문가가 아닌 솔루션 (공유 변경할 상태) 아래의 코드에서

관련 문제