2009-12-12 47 views
1

我有一個onclick事件,其中有一個值,我想發佈到後端php腳本。只是不知道如何在對話框中獲取它。如何將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

只是一個提示:你有你'外功能ready'裏面嵌套'read'y功能。這是因爲'$(function(){'和'$(document).ready(function(){' – 2009-12-12 11:52:14

+0

)相同好的,謝謝,不知道 – jason 2009-12-12 19:46:26

回答

1

在下面的代碼,我使用的是單一的功能,讓您同時存儲和檢索索引。

函數index通過返回聲明並返回另一個函數來創建closure。這意味着變量_index將仍然可用(認爲它就像變量分配在堆上而不是堆棧幀;即malloc-ed),一旦(外部)函數返回,並且您可以由於函數的最後一行是}();,因此函數是自調用的,因此在解析過程中會立即返回。

然後,當你再次調用函數index(現在你基本上會調用內部函數,它接受一個正式參數,ind),你可以傳入索引,如果你這樣做,函數會將它存儲在_index我剛纔提到的變量...即在外部函數返回後仍然可用的變量。

如果你沒有傳入一個參數(即調用函數如:index()),該函數只返回你存儲的變量。這背後的邏輯是,如果一個參數沒有被傳遞,實際參數的值是undefined。因此函數檢查值是否爲undefined,如果是,則返回變量。

而順便說一句,你有一個嵌套的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 2009-12-12 19:57:12

+0

發表解釋 – 2009-12-13 11:21:39

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" 
}, 

警告:這是一個非常不專業的解決方案(共享可變狀態)