2015-03-27 4 views
0
<script type="text/javascript"> 
    var tId; 

    $(function() { 
     $('#btnSign').click(function() { 
      InitiatePolling(); 
     }); 
    }); 

    function InitiatePolling() { 

     event.preventDefault(); 
     tId = setInterval(Poll, 1000); 
    } 
    function Poll() { 
     event.preventDefault(); 
     var res = <%= PollResponse() %>; 
    } 
</script> 

Я пытаюсь написать функцию javascript, которая срабатывает при событии клика от переднего конца. и вызывает метод в бэкэнд. метод действительно можно назвать, проблема в том, что функция Poll() выполняется при загрузке этого пользовательского элемента управления. как предотвратить преждевременную работу функции?Функция Javascript срабатывает на pageload вместо onclick

редактировать:. $ (документ) .ready (функция() { $ ('# btnSign') нажмите (функция() { TID = setInterval (функция() {Poll();}, 1000) ;

 function Poll(){ 
      var res = <%= PollResponse() %>; 
     } 

    }); 
}); 

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

+0

Кнопка btw помещается внутри asp: UpdatePanel, если эта информация проясняет что-либо. – inifus

+0

Почему вы используете setInterval ..? –

+0

Мне нужна функция опроса для запуска каждые 1 секунда. вся процедура еще не завершена, я только начал писать это, чтобы проверить, работает ли она для запуска этой функции при событии click – inifus

ответ

-1

Попробуйте использовать

$(document).ready(function() { 
    $('#btnSign').click(function() { 
     InitiatePolling(); 
    }); 
}); 

В любом случае вы должны использовать инструменты для разработчиков браузера и добавить точку останова в функцию опроса и проверить вкладку «Стек вызовов», чтобы увидеть, откуда она вызывается.

+0

App_Web_qae5vqav.dll! ASP.signup_signup_components_bankid_sign_ascx .__ Render__control1 (System.Web.UI.HtmlTextWriter __w, System.Web.UI.Control parameterContainer) Строка 19 \t C# это то, что находится в стеке вызовов, когда я поставил точку останова на var res = <% = PollResponse()%>; линия. – inifus

0

Попробуйте подписаться на кнопку событие так:

$("body").on("click", "#btnSign", function() { 
    InitiatePolling(); 
}); 
+0

не мешает var res = <% = PollResponse()%>; линии от выполнения при каждой обратной передаче. – inifus

0

Написать setTimeInterval этот путь. В противном случае функция запускается в setTimeInterval. Я знаю, что это странно.

function InitiatePolling() { 

     event.preventDefault(); 
     tId = setInterval(function(){Poll();}, 1000); 
    } 

Update: Проблема заключается в том <%= PollResponse() %> это утверждение в вас код. < %%> определяет, что код будет выполняться на сервере при создании HTML-страницы. Если вы видите отображаемый HTML-адрес своей страницы в браузере, вы увидите, что это не res = <%= PollResponse() %>, а res = out put of PollResponse.

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

Если вы хотите позвонить на серверную функцию из javascript, вам нужно использовать ajax. что-то вроде этого

function Poll() { 
     event.preventDefault(); 
     $.ajax({ 
      url : "yourServerUrl/PollResponse", 
      success : function(result){ res = result; } 
     });   
    } 

Я не знаю о версии JS для асинхронного вызова. Пожалуйста, проверьте это в ссылках.

+0

сделано thx. но ничего не сделал, чтобы остановить мою первоначальную дилемму, функция опроса будет выполняться в каждом post-back. – inifus

+0

Я обновил свой ответ, HTH. – wonderbell

0

Вы можете использовать setTimeout вместо setInterval. Ниже приведен код, который работает правильно:

 $(document).ready(function() { 
      $('.btnSign').click(function() { 
       Poll(); 
      }); 
     }); 

     function Poll() { 
      debugger;    
      var res = '<%= PollResponse() %>'; 

      setTimeout(Poll, 2000); 
     } 
Смежные вопросы