【问题标题】:load more jquery function that i want加载更多我想要的 jquery 函数
【发布时间】:2012-05-18 13:14:50
【问题描述】:

我正在使用 MVC,我的网站设计是有页眉、正文和页脚, 我网站中的每个页面都有相同的页眉和页脚,但正文不同

对于每一个页面都有一个包含 jquery 调用的 JS 文件

对于许多页面,当它打开时,jquery 调用工作并使用 ajax 从数据库中获取数据并将该数据放入该页面中

我的问题是:感觉 jquery 调用以 $(document).ready 开头,所以当我打开任何页面时,所有 jquery 调用都会开始,我不想要那个,但我只想要那个打开的页面的 jquery正在加载

示例

这个 jquery 只是一个页面

$(document).ready(function(){
    $.getJSON("http://localhost/Mar7ba/Cell/getAllCountries/TRUE",function(data){
        var select = $("#countrySelector");
        var options = '';
        for(var i=0;i<data.length;i++){
            options += "<option>"+data[i]+"</option>";
        }
        select.html("<option>Select Source</option>"+options);
    });
});

这个 jquery 用于另一个页面,但它是在我加载第一页时加载的

$(document).ready(function(){
        $.getJSON("http://localhost/Mar7ba/Type/getAllTypes/TRUE",function(data){
            var options = '';
            options+="<option>Select Type</option>";
            for(var i=0;i<data.length;i++){
                options += "<option>"+data[i]+"</option>";
            }
            $("#addPlace #apTypeSelect").html(options);
        });
    });

【问题讨论】:

  • 这个问题太笼统了,我们无法为您提供有用的答案。您可以与我们分享具体的代码实例吗?
  • @Blazemonger 我会,但一些代码
  • @Blazemonger 我用代码更新问题
  • @CharlesSprayberry 请检查更新

标签: php jquery model-view-controller


【解决方案1】:

在触发 AJAX 方法之前,测试您正在操作的元素是否存在。例如,在您的第一个示例中:

$(document).ready(function(){
    var select = $("#countrySelector");
    if (select.length) { // must test .length; 'select' always exists even if it's empty
        $.getJSON("http://localhost/Mar7ba/Cell/getAllCountries/TRUE",function(data){
            var options = '';
            for(var i=0;i<data.length;i++){
                options += "<option>"+data[i]+"</option>";
            }
            select.html("<option>Select Source</option>"+options);
        });
    }; // end if
});

【讨论】:

  • 如果我把这个 $("#addPlace #apConceptSelect").ready(function() 放在 $(document).ready 之后我还必须把你的条件放在?或者如果我只需要把你的我直接使用ajax时的代码?
  • .ready docs 表明它并非真正设计用于除$(document) 之外的任何东西。只需测试$(document).ready 内部元素的.length(在运行适用于该元素的any 代码之前),就可以了。
  • 你的代码运行良好,谢谢你,但我还有一个问题:),为什么当我写 $(docuemnt).ready(function(){$("#d").ready ()});适用于所有页面,是否仅适用于 ID“d”?
  • 好的,我知道了,对不起,我没有看到你的评论,真的谢谢你,我接受你的问题
【解决方案2】:

如果您不希望脚本在页面上运行,那么:

  1. 一开始就不要放在页面上或者
  2. 将其包装在一个条件中,检查运行它是否适合当前页面

【讨论】:

  • 在某些情况下,这并不重要。例如,如果您有一个$('.element').each(...) 块,并且页面上没有.elements,那么.each 块将永远不会运行。
  • @Quentin 我喜欢第二选择,但这种情况怎么可能呢?
  • @Blazemonger — 我认为这属于“你不关心运行的脚本”而不是“你不想运行的脚本”。
  • @Blazemonger ,但是当我使用 $(document).ready 并在 Google Chrome 上打开 JS 编辑器时,我可以看到所有 jQuery 函数都已加载
  • @WilliamKinaan — if (some_test_that_will_only_be_true_on_the_right_page()) { your_function() }
【解决方案3】:

我认为如果你将所有页面的所有启动功能都放在document.ready中,那么功能会变得太冗长并且会影响可读性。您应该为每个页面编写不同的启动函数,并在加载时从页面调用它们,这样您的代码将保持更简单,例如

在js文件中

function InitialFunctionOfPage1()
{//define all prerequisites}

function InitialFunctionOfPage2()
{//define all prerequisites}

在每个页面中,您都可以在 document.ready 上使用相关功能,对于第 1 页来说足够

$(document).ready(function()
{
 InitialFunctionOfPage1();
}

【讨论】:

  • 我所有的问题是我不能做你的第二个代码,因为我有所有页面的标题
  • 不需要在每个页面上放置另一个标题,在页面的正文(或父 div)之前放置 甚至您可以调用 InitialFunctionOfPage1()直接在脚本标签中
猜你喜欢
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
  • 2018-02-01
相关资源
最近更新 更多