在一个项目中,我从内联代码中调用事件。 旧用法;
<button id='button' onclick='do_stuff("<?= $id ?>", "<?= $name ?>")'>Do</button>
但是现在,我想使用事件监听器。新用法;
$('#button').click({id:'<?= $id ?>', name:'<?= $name ?>'}, item_event_handler);
function item_event_handler(event)
{
var id = event.data.id;
var name = event.data.name;
do_stuff(id, name);
}
function do_stuff(id, name)
{
}
这个有效。但这是问题所在;假设我列出了一些如下所示的项目,并且我想在这些项目上添加事件侦听器。当前使用情况;
<ul>
<? foreach($items as $item): ?>
<li class='item' onclick='do_stuff("<?= $item->id ?>", "<?= $item->name ?>")'>
<?= $item->title ?>
</li>
<? endforeach ?>
</ul>
由于我不想使用 JavaScript 创建这些项目,因此我无法使用单独的参数向它们添加事件侦听器。我应该使用数据属性来获取参数吗?像;
$('.item').click(item_event_handler);
function item_event_handler(event)
{
var id = $(this).data('id');
var name = $(this).data('name');
do_stuff(id, name);
}
<ul>
<? foreach($items as $item): ?>
<li class='item' data-id='<?= $item->id ?>' data-name='<?= $item->name ?>'>
<?= $item->title ?>
</li>
<? endforeach ?>
</ul>
这种方法可以使用还是有其他更有意义的方法?以这种方式使用数据属性可能会指向未来的问题?我不想浪费时间或让它变得复杂。