RunOnce для javascript На страницу Отправить обратно.? - PullRequest
1 голос
/ 24 августа 2011
<script language="javascript" type="text/javascript">
    function pageLoad() {

            ShowPopup();

     }
</script>

Приведенный выше код вызовет ShowPopup на pageLoad(). Мне нужно, чтобы ShowPopup метод работал только в первый раз

т.е.,

нужно проверить IsPostback Свойство Page.

Могу ли я сделать это со стороны клиента (JavaScript).?

Ответы [ 3 ]

2 голосов
/ 24 августа 2011

Вы можете просто использовать JavaScript-замыкания и вызывать их так часто, как вам нравится

function once(fn) {
    return function() {
        fn.apply(this, arguments);
        fn = function() {};
    }
}

function pageLoad() {
    if(bPostBack == null)
        ShowPopup();

} 

pageLoad = once(pageLoad);

Таким образом, функция pageLoad будет запускаться только один раз, после чего она будет выполнять только пустую функцию.

Или вы могли бы немного упростить вещи:

function pageLoad() {
    console.log("foo");
    pageLoad = function() {};
 }

(обратите внимание, что однажды приведенная выше функция более общая ... но обе делают то, что вам нужно)

Обновление :Это, очевидно, не работает, если ваша страница перезагружается, поскольку JavaScrip будет просто перезапускаться снова и снова.В этом случае вам нужно установить cookie или какой-либо другой флаг, который вы можете получить, чтобы проверить, было ли уже отображено всплывающее окно.

Вы можете использовать HTML5 Localstorage - но это поддерживается не во всех браузерах .. AЛучше было бы создать cookie, который вы можете получить, как описано в этой статье: http://www.quirksmode.org/js/cookies.html

2 голосов
/ 24 августа 2011

Конечно, вы можете добавить значения серверных свойств в вашу разметку, используя теги script:

C #:

if (<%=(!Page.IsPostBack).ToString() %>) ShowPopup();

VB.NET

if(<%=(Not Page.isPostBack).ToString().ToLower() %>) ShowPopup();
1 голос
/ 24 августа 2011

Да, вы можете использовать переменную javascript, например, такую:

В вашем коде, когда происходит обратная связь, вызовите следующий код для регистрации блока javascript.

ClientScript.RegisterClientScriptBlock(GetType(), "postbackFlag", "var bPostBack = true;", true);

и в вашем javascriptпроверьте значение этой переменной, чтобы обнаружить вхождение сообщения назад:

<script>
function pageLoad() {
    if(bPostBack == null)
        ShowPopup();

 }   
</script>
...