我在PHP中的while循环中有一个表单。有action =“javascript:block_grade($ id)”,但是当我在block_grade函数中发出警报(id)或警报(lvl)时,我从所有循环中收到相同的数字?
这是在我的循环中:
echo '<form action="javascript:block_grade('.$show['id'].')" method="post">';
echo 'Change blockgrade: ';
echo '<input type="text" name="lvl" size="1" value="'.$show['lvl'].'">';
echo '<input type="submit" value="Save">';
echo '</form>';
这是我在底部的功能:
<script>
function block_grade ( id ) {
var lvl = $('input[name=lvl]').val();
alert(lvl);
alert(id);
}
</script>
我怎样才能解决这个问题,有没有比这更有效的方法呢?
答案 0 :(得分:3)
我希望看到JavaScript直接附加事件处理程序,然后您可以轻松地执行与表单相关的操作。
echo '<input type="text" name="lvl" size="1" value="'.$show['lvl'].'">';
echo '<input type="hidden" name="id" size="1" value="'.$show['id'].'">';
然后:
$('form').submit(function() {
var id = $(this).find('input[name=id]').val();
var lvl = $(this).find('input[name=lvl]').val();
});
除了其他优点之外,这还释放了action
属性,因此您可以填写一个脚本,可以在没有JavaScript的情况下直接处理此请求。
但更重要的是(原始问题),它确保您正在查看 正确的 lvl
字段,而不仅仅是第一个lvl
字段jQuery碰巧在DOM中出现。
答案 1 :(得分:0)
我甚至不知道可以将表单的操作设置为“javascript:...”。我总是使用onsubmit
事件。
无论如何,对于lvl
来说,难怪你总是一样,因为val()
给出了集合中第一个元素的值。该集合在整个页面中包含所有 input
。
但是,对于id
,您应该获得正确的值。也许您应该显示生成的最终HTML。