如何访问click函数内的变量?

时间:2014-04-30 11:52:26

标签: jquery asp.net-mvc

我在document.ready()中有一个函数,如下所示

$(document).ready(function () {
    var reason = $("#DropDown_Select").val() // i can access this 
    var delreason;
    $('#btnDeleteRow').click(function () {
        delreason = prompt("Are u serious");
        alert(delreason); //Here i am getting entered prompt value sucessfully 
    });


    //when i try to use the delreason else where in my code i am getting " UNDEFINED "
    //Actually i need this so i can pass it to controller 

    "sDeleteURL": "/Home/DeleteData/?start=" + delreason //delreason here is undefined 

});

在控制器部分,我使用的是:

 var value = Request.QueryString["start"]; //undefined value coming

编辑1:

var delreason='';
$(document).ready(function () {
    var reason = $("#DropDown_Select").val()
    var oTable;
    $('#btnDeleteRow').click(function () {
        delreason = prompt("r u serious");
        alert(delreason);
        debugger;
    });

 oTable = $('#myDataTable').dataTable({ 
 "bProcessing": true,
            "bServerSide": true,
            "bAutoWidth": true,
            "sAjaxSource": "AjaxHandler"
});

oTable.oTable.makeEditable({

     "sDeleteURL": "/Home/DeleteData/?start=" + delreason  // is there any problem here
});

非常感谢任何解决方法。我无法测试sDeleteUrl中的dereason是否存在但是当我尝试提取字符串时,我在控制器上没有得到任何东西。

4 个答案:

答案 0 :(得分:1)

如果您的真正问题是您想要在任何地方访问delreason,您必须在document.ready

之外声明它

答案 1 :(得分:1)

var delreason;需要在$(document).ready()之外声明全局访问它。

您可以理解与FIDDLE

的区别

答案 2 :(得分:1)

方法1 - 使用窗口全局对象:

$(document).ready(function () {
    var reason = $("#DropDown_Select").val() // i can access this 
    $('#btnDeleteRow').click(function () {
        window.delreason = prompt("Are u serious"); 
        alert(window.delreason);
    });
});

方法2 - 在全局范围内(在闭包之外)声明dereason:

var delreason = '';
$(document).ready(function () {
    var reason = $("#DropDown_Select").val() // i can access this 
    $('#btnDeleteRow').click(function () {
        delreason = prompt("Are u serious"); 
        alert(delreason);
    });
});

答案 3 :(得分:1)

delreason在闭包(函数体)中声明,并且只存在于此函数块中。

如果您尝试在同一个闭包内(在文档就绪时执行的函数体)中访问此变量表单代码,则该变量可用。

如果您尝试从其他地方访问它,它将无法使用。

一个可能性是在全局范围内定义此变量,在浏览器中是窗口对象,如下所示:

window.delreason = '...';

或只是

delreason = '...'; // without the var

但是如果你这样做,请考虑到你正在污染全球范围,这通常不是一个好主意(你可能会与其他脚本发生冲突)。但是,如果您没有其他脚本并且它是一个非常简单的页面,那么它是可以接受的(虽然不是很容易接受)。

另一种选择是创建一个隐藏字段,并使用jquery在此字段中设置和获取值:

<input type='hidden' id='delreason'/>

在你的js中:

$('#delreason').val('written value');

var delreason = $('#delreason').val();