嘿大家,看看下面的代碼和欣賞的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