Обновление содержимого функции Javascript при обратной передаче - PullRequest
1 голос
/ 22 марта 2012

Вот мой код

<script type="text/javascript">
    function getNextScroll(i){
        <asp:Literal ID="infiniteScrollTableJS" runat="server"></asp:Literal>
    }
</script>

Я заполняю этот литерал некоторым Javascript из CodeBehind.Это прекрасно работает OnLoad.Однако, когда я делаю обратную передачу, у меня возникает проблема.Литерал обновляется при обратной передаче.Фактический скрипт, который находится внутри функции, на самом деле изменяется (я вижу это с Firebug).НО, функция не знает, что там есть новый скрипт, она просто продолжает запускать старые вещи.

Итак, насколько я могу судить, я хочу «повторно инициализировать» код внутри функции после обратной передачи.,

Я знаю, как вызвать функцию после обратной передачи, используя add_endRequest.

Эта проблема не является уникальной для .NET или чего-либо еще.На самом деле, у меня есть простой пример -> http://jsfiddle.net/7JxY7/1/ «Функция запуска» всегда будет предупреждать «один» даже после изменения содержимого скрипта.

Мне кажется, что jQuery, вероятно, имеет что-то, что яможно было бы использовать, но, ища вокруг, я ничего не нашел.

РЕДАКТИРОВАТЬ:

Я попробовал предложение по mblase75.Это прекрасно работает в Javascript (что более важно, теперь я понимаю, почему), однако, учитывая этот подход, я все еще не могу заставить его работать с обратной передачей.Вот мой обновленный код.

<script type="text/javascript">
    function getNextScroll(i){
        //some stuff
    }

    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_endRequest(function (s, e) {
        //mblase75 suggestion
        getNextScroll = function (i){<asp:Literal ID="infiniteScrollTableJS" runat="server"></asp:Literal>};
    });
</script>

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

1 Ответ

1 голос
/ 22 марта 2012

В JavaScript функция на самом деле является объектом. Поэтому вместо того, чтобы пытаться переписать элемент <script> строкой, замените имя функции (переменной) новым объектом функции:

<script>
goTest = function(){
    alert('one');                        
}

function changeTest1(){
    goTest = function(){alert('two');};
    alert('ok');
}    
</script>

<a onclick="goTest();">Run Function</a><br/>
<a onclick="changeTest1();">Change Function</a>
​

http://jsfiddle.net/7JxY7/2/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...