Как получить доступ к переменной, которая находится внутри функции щелчка?

0

У меня есть функция в 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
});

Любое обходное решение очень ценится. Я не могу проверить delreason в sDeleteUrl, потому что он присутствует или нет, но одна вещь, я ничего не получаю от контроллера при попытке извлечь строку.

  • 3
    var delreason вне $(document).ready(function () {
  • 0
    Так в чем твоя настоящая проблема?
Показать ещё 4 комментария
Теги:
asp.net-mvc

4 ответа

1
Лучший ответ

delreason объявляется внутри замыкания (тела функции) и существует только внутри этого функционального блока.

Если вы попытаетесь получить доступ к этому шаблону формы переменной внутри одного и того же закрытия (тело функции, выполненной в готовом документе), переменная доступна.

Если вы попытаетесь получить доступ к нему из другого места, он будет недоступен.

Одна из возможностей заключается в том, чтобы определить эту переменную в глобальной области видимости, которая в браузере является объектом окна, например:

window.delreason = '...';

или просто

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

Но если вы это сделаете, учтите, что вы загрязняете глобальную область, и это обычно не очень хорошая идея (вы можете столкнуться с другими сценариями). Однако, если у вас нет других сценариев, и это очень простая страница, она может быть приемлемой (хотя и не очень приемлемой).

Другой вариант - создать скрытое поле и использовать jquery для установки и получения значения в этом поле:

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

В вашем js:

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

var delreason = $('#delreason').val();
  • 0
    спасибо и хорошая дополнительная информация
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 - объявить разброс в глобальном масштабе (за пределами закрытия):

var delreason = '';
$(document).ready(function () {
    var reason = $("#DropDown_Select").val() // i can access this 
    $('#btnDeleteRow').click(function () {
        delreason = prompt("Are u serious"); 
        alert(delreason);
    });
});
  • 0
    Когда я сохраняю причину вместо delreason, я получаю выпадающее значение успешно, но не текст приглашения, который я получаю к контроллеру ..
1

Если ваша настоящая проблема заключается в том, что вы хотите получить доступ к разбору повсюду, вы должны объявить ее за пределами документа.

  • 0
    большое Вам спасибо
1

var delreason; необходимо объявить за пределами $(document).ready() доступ к нему по всему миру.

Вы можете понять разницу с FIDDLE

Ещё вопросы

Сообщество Overcoder
Наверх
Меню