嘿大家,看看下面的代码和欣赏的id属性是如何凌乱是HTML ID证明是侵入性的javascript?
查看文件
<?php foreach($array_project as $prj) : ?>
<div id="prj-p<?=$item['project_id'] ?>">
<?php foreach($arr_skill as $skill) : ?>
<h2><?=$skill['name'] ?></h2>
<a class="view" id="skill-p<?=$prj['project_id'] ?>-s<?=skill['skill_id'] ?>">view</a>
<a class="edit" id="edit-p<?=$prj['project_id'] ?>-s<?=skill['skill_id'] ?>">edit</a>
<a class="delete" id="delete-p<?=$prj['project_id'] ?>-s<?=skill['skill_id'] ?>">delete</a>
<?php endforeach; ?>
</div>
<?php endforeach; ?>
JavaScript文件(使用jQuery)
$('.view').live('click', onClick);
$('.edit').live('click', onClick);
$('.delete').live('click', onClick);
function onClick()
{
// prjId and skillId are effectively arguments that are
// traditionally passed via onClick(prjId, skillId), but here
// we've attached them to element ids
prjId = this.id.replace(/(skill\-p)|(\-s\d+)/g, '')
skillId = this.id.replace(/(skill\-p\d+)|(\-s)/,'');
// do stuff with the prjId and skillId
}
所以我的问题与上面的代码是在视图文件中做这样的事情
<a class="view" id="skill-p<?=$prj['project_id'] ?>-s<?=skill['skill_id'] ?>">view</a>
是有效相同
<a onclick="onClick(<?=$prj['project_id'] ?>,<?=skill['skill_id'] ?>)">view</a>
随着后者实际上是更可读给程序员。在前者中,我不喜欢我如何派生自己的id命名约定来跟踪数据库实体ID:例如,-p前缀表示项目ID,-s前缀表示skill_id。然后我必须使用正则表达式来解析它。我不喜欢内联js事件处理程序的后者,因为这是干扰性的javascript。
我想过简化这样的代码:
查看文件
<?php foreach($array_project as $prj) : ?>
<div id="prj-p<?=$item['project_id'] ?>">
<?php foreach($arr_skill as $skill) : ?>
<h2><?=$skill['name'] ?></h2>
<input type="hidden" class="project_id" value="<?=$prj['project_id'] ?>" />
<input type="hidden" class="skill_id" value="<?=$prj['skill_id'] ?>" />
<a class="view">view</a>
<a class="edit">edit</a>
<a class="delete">delete</a>
<?php endforeach; ?>
</div>
<?php endforeach; ?>
Javascript File (using Jquery)
$('.view').live('click', onClick);
$('.edit').live('click', onClick);
$('.delete').live('click', onClick);
function onClick()
{
prjId = this.parentNode.childNodes[1].value;
skillId = this.parentNode.childNodes[2].value;
// do stuff with the prjId and skillId
}
这是很容易当我有分贝实体IDS的很多js和查看文件之间的引用(少编码例如,我只需要打印project_id和skill_id ONCE)。但是这个解决方案的问题是,只要我的设计师改变了xhtml模式,我就必须更新我的JavaScript文件以重新引用隐藏的输入字段。
有没有更容易和更少的代码冗余方式的HTML元素传递数据到JavaScript函数?
短标签'<?='让我畏缩 – NullUserException 2010-09-16 18:05:01
@NullUserExeption因为这段代码的休息吗?就像代码和设计的完美分离一样...... – Tokk 2010-09-16 18:09:54
所有这些标记混合代码都让我感到畏惧,无论“分离”程度如何。但长标签使这种已经变得怪诞的文本变得更加丑陋。只要我们忘记了我们正在使用的语言,就可以在我们的代码中使用垃圾邮件“php”!为什么只写一些看起来像'=$blah?>'的小东西,当你可以写一些像'<?php echo $ blah?>'完全减速的东西时? phpphpphp bestpracticebestpracticebestpractice。 – MooGoo 2010-09-16 19:10:06