Функция jQuery / MVC3 html onclick работает только один раз - PullRequest
0 голосов
/ 28 марта 2012

Хорошо, у меня есть функция, которая вызывается при нажатии на изображение.По какой-то причине он вызывает только один раз, когда я нажимаю на него, и я немного озадачен, почему.

Вот мой javascript (в сочетании с небольшим количеством бритвы), по сути, все, что он делает, это вызываетМетод post в контроллере, который возвращает частичное представление и обновляет это частичное представление.

function mFunction() {
    @{ x = x = 1; }
    $.post('/Home/_MyPartial', { 'param1': "@x" }, function(result) {
        $('.myUpdatedDiv').html(result);
        $('.anotherDiv').empty();
        $('.anotherDiv').append('@x');
    });
}

Тогда у меня есть мой тег, подобный этому

<a href="#" onclick="mFunction()">Hello</a>

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

  1. Он попадает в контроллер каждый раз, когда на него нажимают (несколько раз).Так что я знаю, что так работает
  2. Сама страница не обновляется и во второй раз ничего не заменяется.Контроллер успешно возвращает частичное представление, но javascript обновляет его только один раз.

Поэтому я был бы признателен за любую помощь в том, почему он не обновляется более одного раза.

спасибо

edit

Хорошо, допустим, я делаю это:

@{ int x = 0; }

<script type="text/javascript">
function tester() {
    @{ x++; }
    $('.H').empty();
    $('.H').append('@x');
}
</script>

<div class="H"></div>
<a href="#" onclick="tester()">Click</a>

При нажатии на тег отобразится «1» и нажатие на неговсегда будет отображать «1».Это как-то связано с бритвенным кодом, который рендерится только один раз или что-то в этом роде?есть ли способ обойти это?

Ответы [ 3 ]

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

попробуйте

<script type="text/javascript">
var indx = 1;//Set this to be the value from the model you want to display 
function tester() {
    $('.H').empty();
    $('.H').append(indx);
indx++;
}
</script>

<div class="H"></div>
<a href="#" onclick="tester()">Click</a>
0 голосов
/ 29 марта 2012

Я предлагаю вам использовать Firefox Firebug или веб-консоль (Ctrl + Shift + K) для просмотра асинхронных вызовов. Там вы узнаете, действительно ли браузер подключается к серверу при каждом клике (и вы даже можете увидеть, с какими параметрами POST или GET). Похоже, что он должен обращаться к серверу каждый раз, но поскольку между вызовами состояние не сохраняется, вы всегда получаете один и тот же результат после первого вызова (поскольку вы всегда отправляете одно и то же значение X после первого вызова).

0 голосов
/ 28 марта 2012

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

<script type="text/javascript">
function tester() {
    $('.H').empty();
    $('.H').append('1');
}
</script>

<div class="H"></div>
<a href="#" onclick="tester()">Click</a>

Этовот почему он будет только добавлять 1.

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