使用不同的参数调用javascript函数,具体取决于我所在的页面

时间:2010-10-25 15:07:49

标签: javascript jquery conditional

我正在尝试学习som javascript / jQuery的东西,而我真的在努力学习这个。这基本上是一个结构问题 - 如何以最好的方式做事。

我有这个函数,它从三个无序列表中的一个中随机挑选一个列表项(所有列表项都已隐藏)并显示它。根据我当前所在的页面,我想特别从一个列表中选择一个列表项。我的所有列表都标有“id”,以使其独一无二。

我可以使用我选择的列表ID将参数传递给我的randomize函数,以使其仅从该特定列表中选择一个项目。但是,这意味着我必须在html中放置内联脚本(一个脚本标记,每个页面都有自定义函数调用),以及我所听到的内联脚本以及阻止页面呈现。那会很糟糕,因为我关心性能。另一种方法可能是有很多if / else子句,例如“if body has class theclassname - > from listize with id with the_id”。但这意味着脚本必须在DOM上进行大量不必要的查询。

不知道我所谈论的是否有一个术语。也许类似于“条件函数调用”或“基于页面的函数调用”。

你会如何解决这个问题?我知道我的CSS& HTML,但对javascripting来说还是一个新手。只是想做正确的事......

5 个答案:

答案 0 :(得分:1)

一种方法是创建一个包含在所有页面标题中的javascript文件。 javascript文件将包含带有pageId的函数,并返回基于页面的列表项

function getListItem(pageId) {
    switch (pageId) {
       ...
    }
}

将ID属性分配给每个页面的BODY标记,对应于javascript函数中的pageId:

<body id="home-page">

然后,在页面加载时,您可以使用jQuery将ID值传递给您的函数:

<script type="text/javascript">
    $(function() {
        var listItem = getListItem($('body').attr["ID"]);
    } );
</script>

这会将“home-page”传递给你的javascript函数,并返回你的javascript函数中逻辑确定的列表项。

答案 1 :(得分:1)

执行此操作的最佳方法是检查url(不涉及DOM遍历,没有其他外部脚本,因此速度很快):

var path = window.location.pathname;
if (path.indexOf('/a_unique_url') !== -1) {
    // do code for the page 'a_unique_url';
} else if (path.indexOf('/another_unique_url') !== -1) {
    // do code for the page 'another_unique_url';
} else {
    // do default action, because none of the above were found.
}

你的一点点罗嗦,但如果你有很多独特的操作会更快,那就是使用switch语句和完整路径,如下所示:

var path = window.location.pathname;
switch(path) {
    case '/full/path/after/domain.html':
        // do code for the page '/full/path/after/domain.html';
        break;
    case '/some/other/path.html':
        // do code for the page '/some/other/path.html';
        break;
    case '/yet/another/path.html':
        // do code for the page '/yet/another/path.html';
        break;
    default:
        // do default action, because none of the above were found.
        break;
}

虽然,如果您可以访问服务器端脚本,那么这些操作有更有效的方法。

答案 2 :(得分:0)

在运行时从服务器端添加它: Page.RegisterClientScriptBlock Method


使用代码隐藏中的属性自定义它;

function myFunction() {
        var theParameter = '<%# parameterName>';
        // do something
    }

答案 3 :(得分:0)

为避免脚本占用浏览器的可能性,通常的做法是将脚本放在body标记结束之前。

您甚至可能希望查看异步脚本加载。

答案 4 :(得分:0)

朋友,我不明白你想要什么,但我会尽力帮助:

如果你把它们单独放在你的代码中间,内联的javascript会阻止你的页面,但你可以说它们只有在页面加载了这段代码时执行:

window.onload = function (){
  //call your function with the desired parameter
}

因此,当您的页面加载时,将执行window.onload上的函数。