【问题标题】:jQuery/MVC3 function html onclick only working oncejQuery/MVC3 函数 html onclick 只工作一次
【发布时间】:2012-03-28 14:52:45
【问题描述】:

好的,我有一个在单击图像时调用的函数。由于某种原因,当我单击它时它只会调用一次,我有点不明白为什么。

这是我的 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 只更新一次。

因此,对于为什么它不会多次更新的任何帮助,我将不胜感激。

谢谢

编辑

好吧,假设我这样做:

@{ 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”。这与仅渲染一次的剃须刀代码有关吗?有办法解决吗?

【问题讨论】:

  • 最好显示所有相关元素的标记。这将有助于轻松回答您的问题。
  • @bbedward 浏览器是否缓存了请求?
  • @ShankarSangoli 用一个基本但完整的例子更新了我的答案
  • @Qpirate 我正在做一个不应被浏览器缓存的发布请求?

标签: javascript jquery html asp.net-mvc


【解决方案1】:

试试这个

<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>

【讨论】:

    【解决方案2】:

    Razor 代码仅在服务器上运行,下载页面后,您所拥有的只是带有 Razor 值输出的 javascript,因此您的第二个示例将如下所示:

    <script type="text/javascript">
    function tester() {
        $('.H').empty();
        $('.H').append('1');
    }
    </script>
    
    <div class="H"></div>
    <a href="#" onclick="tester()">Click</a>
    

    这就是为什么它只会追加 1。

    【讨论】:

    • 太好了,有机会我会接受的。附带说明一下,知道如何将 javascript Date 转换为 .NET DateTime 字符串吗?
    • Np。这有望帮助您确定日期 - stackoverflow.com/questions/5521553/…
    【解决方案3】:

    我建议您使用 Firefox 的 Firebug 或 Web 控制台 (Ctrl+Shift+K) 来查看异步调用。你会知道浏览器是否真的在每次点击时都在访问服务器(你甚至可以看到使用什么参数是 POST 还是 GET)。 看起来它应该每次都联系服务器,但是由于在调用之间没有保持状态,所以在第一次调用后你总是得到相同的结果(因为你总是在第一次调用后发送相同的 X 值)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多