问题描述
我有一张表,主体正在使用 foreach 循环。
### numerical derivative for gnuplot 4.2.6
reset
DATA = "Data.dat"
set table DATA
set samples 150
plot sin(x)/x
unset table
TEMP1 = "temp1.dat"
TEMP2 = "temp2.dat"
set table TEMP1
plot DATA u 1:2 every ::1
unset table
system(sprintf('paste %s %s > %s',DATA,TEMP1,TEMP2))
x0(col) = (column(col)+column(col+3))/2.
dx(col) = (column(col+3)-column(col))/2.
dy(col) = (column(col+3)-column(col))/2.
plot DATA u 1:2 w lp pt 7 title "Data",\
TEMP2 u (x0(1)):(dy(2)/dx(1)) w lp pt 7 title "1st Derivative"
### end of code
对于我做的 javascript:
<?PHP foreach ($list as $test) : ?>
<tr>
<td>
<?= form_open_multipart('/test/update/' . $test['id'],['class' => 'needs-validation','novalidate' => '']); ?>
<?= form_dropdown(
'something',$option,$test['smt'],['required' => '','id' => 'smt2','class' => 'd-block col-12 form-control']
); ?>
</td>
<td align="right"><button class="btn btn-success btn-sm" type="submit" id="submit" disabled>SAVE UPDATE</a></td>
<?= form_close(); ?>
</tr>
<?PHP endforeach; ?>
当用户更改下拉列表的值时,将启用“保存更新”按钮。现在,如果用户在任何下拉列表中更改,无论在哪一行,所有按钮都将被启用。 我希望仅启用更改下拉列表的行中的保存按钮。
解决方法
您需要使用 DOM 遍历来查找与引发 button
事件的 select
相关的 change
。您可以使用传递给处理程序函数的事件获取对 button
的引用。从那里您可以使用 tr
和 closest()
获得最近的公共 find()
。试试这个:
jQuery($ => {
$('select').on('change',e => {
$(e.target).closest('tr').find('button').prop('disabled',false);
});
});
注意使用 prop()
来设置 disabled
标志而不是 attr()
。最好尽可能使用 prop()
,因为它可以避免不必要的 DOM 访问,从而提高性能。