使用PHP动态创建JavaScript并将其放在<script> Tags </script>之间

时间:2012-10-18 04:35:30

标签: php javascript

通常我会像这样放置JavaScript:

<head>
<title>Title goes here</title>
<script>
some JavaScript here
</script>
</head>

<body>
some codes here
</body>

但现在我有一个案例,必须生成JavaScript代码并且与HTML文件中的LI标记数相等:

$('#manage-1').click(function(e) { 
    $(this).next(".manage-content-wrap").find(".manage-content").load("test-manage-1.php");
    e.preventDefault();
});
$('#manage-2').click(function(e) { 
    $(this).next(".manage-content-wrap").find(".manage-content").load("test-manage-2.php");
    e.preventDefault();
});

我有一个想法是通过用这样的变量修改#manage-1来从PHP创建JavaScript:#management- $ i和任何其他动态部分。

但是,是否可以像这样放置标签:

<head>
<title>Title goes here</title>
<script>
some JavaScript here

<?php
PHP code inside script tags
?>

</script>
</head>

7 个答案:

答案 0 :(得分:3)

使用A CLASS!

无需为每个元素添加一行代码。为要启用click事件的每个元素添加公共类。您将其用作选择器。它使代码更小更快。

HTML:

<a class="manage" data-file="test-manage-1.php">foo</a>

JavaScript的:

$(document).on('click', ".manage", function(e) { 
    var elem = $(this); 
    elem.next(".manage-content-wrap").find(".manage-content").load(elem.data("file"));
    e.preventDefault();
});

答案 1 :(得分:3)

如果你想把你的JavaScript代码放在php标签中,那么你只需输入以下样式。

<head>
<title>Title goes here</title>
<?php echo"<script>
some JavaScript here

PHP code inside script tags


</script>";
?>
</head>

答案 2 :(得分:2)

好的,我认为我们可以通过稍微改进一下你的技术来解决这个问题。

你真的不需要多个.click处理程序,你需要有一个更好的选择器策略。

假设你用这个围绕你的LI:

<ul class="managers">
    <li><a href="" id="manage-1">Link Text 1</a></li>
    <li><a href="" id="manage-2">Link Text 2</a></li>
    <li><a href="" id="manage-3">Link Text 3</a></li>
    <li><a href="" id="manage-4">Link Text 4</a></li>
</ul>

现在,你真的只需要一个.click处理程序:

$(".managers li a").click(function(evt) {
    evt.preventDefault();
    var mID = $(this).attr("id");
    $(this).next(".manage-content-wrap").find(".manage-content").load("test-" + mID + ".php");
});

请注意,您可能必须以这种方式修改您找到正确的.manage-content元素的方式,但您应该明白这一点。

通过这种方式,您也不会在演示方面将您的数据与您的数据紧密联系在一起,并且您会稍微干掉您的代码。几乎每当你看到自己需要吐出完全相同的自动生成代码时,除了几个细节之外,还有机会简化方法。

希望这有帮助!

答案 3 :(得分:1)

或者如果它对所有人来说都是一样的话,请考虑使用课程。

$('.manage').click(function(e) { 
    $(this).next(".manage-content-wrap").find(".manage-content").load("test-manage-2.php");
    e.preventDefault();
});

否则,您可以在此处使用for()循环。

<?php
    for($i = 1; $ < 5; $i++){?>
$('#manage-<?php echo $i; ?>').click(function(e) { 
    $(this).next(".manage-content-wrap").find(".manage-content").load("test-manage-<?php echo $i; ?>.php");
    e.preventDefault();
});
<?php }
?>

答案 4 :(得分:1)

您应该使用类和数据属性而不是ID来编写HTML标记。

例如:

<a href="#" class="manager" data-id="1">Manager 1</a>
<a href="#" class="manager" data-id="2">Manager 2</a>

然后您可以使用类选择器来获取所有“经理”链接,如下所示:

$('.manager').click(function(e) {
    $(this).next(".manage-content-wrap").find(".manage-content").load("test-manage-" + $(this).data('id') + ".php");
    e.preventDefault();
});

假设你有jQuery。

答案 5 :(得分:0)

你可以用php做任何事情,因此也可以将它用作jquery代码生成器 你只是回应特定区域的jquery(就像你写的那样),那就是它

答案 6 :(得分:0)

在您的javascript示例中,您可以使用jquery通配符,假设您的id有助于定义php页面的URL:

/* Get all items with an id starting with manage and assign the click event */
$("[id^=manage]").click(function(e) { 
    $(this).next(".manage-content-wrap").find(".manage-content").load("test-" + $(this).attr('id') + ".php");
    e.preventDefault();
});

JSFiddle:http://jsfiddle.net/YM5AS/