【问题标题】:Jquery load not working properly on click点击时 Jquery 加载无法正常工作
【发布时间】:2016-01-28 20:36:32
【问题描述】:

这就是我正在将 HTML 加载到...

<div id="AJAX_Parent" class="visibleBorderThick">
    <div id="AJAX_Child">
    ...
    </div>
</div>

这是使用 jquery 的加载函数加载 HTML 的链接。

<a id="MyID_1755055367" class="dynamicLink" href="/rules"> Click Me </a>

这是确保 javascript 和 jquery 正在运行的 javascript...

    <script type="text/javascript">
            alert("Javascript is running");

            if (window.jQuery) {
                alert("jQuery is loaded") 
            } else {
                alert("jQuery is not loaded")
            }

            if ( $( "#MyID_1755055367" ).length ) {
                alert("Found element"); /* Element is found */
                alert( $( "#MyID_1755055367" ).length ); /* length is 1*/
            } else {
                alert("Cannot Find Element")
            }                

    </script>

这是实际执行加载的 javascript...

    $("#MyID_1755055367").onclick = (function() {
        alert("onclick activated");
        history.pushState({ linkSource: window.location.href }, "page title", "/rules");
        $("#AJAX_Parent").load("/rules #AJAX_Child");
        return false;
    });

^ 这不起作用。我没有看到“onclick 已激活”

另外,我也试过这样...

            document.getElementById("MyID_1704232995").onclick = (function() {
                alert("onclick activated");
                history.pushState({ linkSource: window.location.href }, "page title", "/rules");
                $("#AJAX_Parent").load("/rules #AJAX_Child");
                return false;
            });

这样做会给我"onclick activated",我看到 URL 已更改,当我在 Google Chrome 中查看页面源时,我看到与 &lt;div id="AJAX_Child"&gt; 有关的 HTML 已被修改。

这一切都很好,但是页面没有正确呈现(它呈现扁平 - 好像AJAX_Child 是一个空的 div)。注意:通过将 ID 移动到“”来修复此“扁平化”。美元符号加载仍然不起作用。

* 修复了 jquery *

            $(@{ Html("\"" + "#" + uniqueID.body.substring(1)) }).click(function() {
                alert("onclick activated");
                history.pushState({ linkSource: window.location.href }, "page title", @quotedURL);
                $("#AJAX_Parent").load(@{ Html(quotedURL.body.dropRight(1) + " #AJAX_Child\"") });
                return false;
            });

* 现在向前点击有效,但后退按钮不起作用(后退按钮导致 HTML 在“页面源”内发生变化,但页面保持不变)*

【问题讨论】:

  • 您的 AJAX_Child div 在引号内没有 id。当然不能帮助你的事业
  • @mhodges - 修复了“扁平化”效果,但“$("#MyID_1755055367").onclick”仍然永远不会运行。
  • 查看我们的答案。您为 jQuery 语法错误地定义了 onclick 事件
  • 不能将原生 dom 节点方法直接复制到 jQuery 方法中。这不是 jQuery 的工作方式。使用本机 dom 方法或 jQuery 方法....不要将它们混合在一起,否则您只会像已经发生的那样混淆自己

标签: javascript jquery html css ajax


【解决方案1】:

jQuery 选择器不提供onclick 处理程序。请改用.click()https://api.jquery.com/click/

其次,.load 接受两个参数:一个 URL 和一个回调。 https://api.jquery.com/load/

第三,请注意您的分号使用,或缺少。它让我可爱的小猫哭了。你不希望这种情况发生。永远。

【讨论】:

  • 加载只需要 url 参数...其他参数是可选的。只是为 OP 澄清一下。
  • $"#MyID_1755055367").click(function() ... 有效。页面渲染。您的方式和 mhodges 方式的工作方式相同。作为旁注,您不会碰巧知道要添加什么来使“返回”工作,你会吗?现在它只是保持明显的不变。
【解决方案2】:

您的 onclick 定义格式不正确。应该是这样的:

$("#MyID_1755055367").on("click", function() {
        alert("onclick activated");
        history.pushState({ linkSource: window.location.href }, "page title", "/rules");
        $("#AJAX_Parent").load("/rules #AJAX_Child");
        return false;
    });

【讨论】:

  • 那行得通。您不会碰巧知道如何使“后退”按钮也正常工作吗?现在它只是明显保持不变。
  • 我假设 @{} 是剃刀语法?如果是这样,我不相信它可以在 javascript 中使用。
  • 另外 - 查看 Hatchet 对 popstate 的评论
猜你喜欢
  • 2014-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多