如何将onclick变量放入对话框函数中

时间:2009-12-12 11:20:33

标签: javascript jquery

我有一个onclick事件,其中包含我要发布到后端php脚本的值。只是不确定如何在对话框功能中获取它。

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。有什么提示吗?

由于

3 个答案:

答案 0 :(得分: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');
            }

        }
    });
});

答案 1 :(得分:0)

您可以使用.data()

将其作为数据存储在元素上

答案 2 :(得分: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"
},

警告:这是一个非常不专业的解决方案(共享可变状态)