2009-12-12 6 views
1

J'ai un événement onclick qui a une valeur que je veux publier dans un script PHP backend. Je ne sais pas comment l'obtenir dans la fonction de dialogue.Comment faire pour obtenir la variable onclick dans une fonction de boîte de dialogue

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'); 
      } 

     } 
    }); 
}); 
}); 

La valeur est job_index. Des conseils?

Merci

+0

juste un conseil: vous avez une fonction 'read'y imbriquée dans votre fonction' ready' externe. C'est parce que $ (function() {'est le même que' $ (document) .ready (function() {' –

+0

Ok merci, je ne savais pas que – jason

Répondre

1

Dans le code ci-dessous, j'utilise une fonction unique qui vous permettra de stocker et récupérer votre index.

La fonction index crée un closure en retournant la déclaration et en retournant une autre fonction. Cela signifie que la variable _index sera toujours disponible (pensez-y comme si la variable était allouée sur le tas au lieu de la pile-frame, ie malloc-ed) une fois que la fonction (externe) est revenue, et comme vous pouvez voir la fonction est auto-invoquant, en raison de la }(); sur la dernière ligne de la fonction, retournant ainsi immédiatement lors de l'analyse.

Ensuite, lorsque vous appelez à nouveau la fonction index (que vous appellerez maintenant la fonction interne qui prend un argument formel, ind), vous pouvez passer votre index et si vous le faites, la fonction le stockera dans le _index variable que j'ai mentionné plus tôt ... c'est-à-dire la variable qui est toujours disponible après la fonction externe retournée.

Si vous ne transmettez pas un argument (c.-à-d. Appelez la fonction comme telle: index()), la fonction renvoie uniquement votre variable stockée. La logique derrière ceci est que si un paramètre n'est pas passé, la valeur de l'argument réel est undefined. Ainsi, la fonction vérifie si la valeur est undefined, et si c'est le cas, elle retourne votre variable. Par la suite, vous avez une fonction ready imbriquée à l'intérieur de votre fonction externe ready. C'est parce que $(function() { est le même que $(document).ready(function(){. Je fixe cela dans le code ci-dessous:

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'); 
      } 

     } 
    }); 
}); 

Une autre façon de le faire est en utilisant la méthode data que nickf mentionné. Cela vous permettra de stocker l'index directement dans votre élément, comme ceci:

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

oui ça marche, désolé je l'ai laissé si tard. ça marche? – jason

+0

Publié l'explication –

0

Vous pouvez le stocker sous forme de données sur l'élément en utilisant .data()

0

Créer une variable globale, stocker la dernière il job_index cliqué, et le lire à partir de là dans le gestionnaire de clic.

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

Attention: Ceci est tout à fait une solution non professionnelle (partagé d'état mutable)

Questions connexes