【发布时间】:2015-06-24 17:55:56
【问题描述】:
我尝试使用来自this question 的答案,但没有成功。下面是我的 HTML 的缩短版本。例如,如果一个用户创建一个包含 6 个路由器的订单,例如,当另一个用户去为该订单创建一个货件时,我在表中创建 6 行,以便用户可以扫描路由器的条形码。条形码通过 ajax 调用进行验证。如果一切正常,api 将返回“OK”。如果 api 结果不是“OK”,我想让它使条形码输入无效。
<form name="new_shipment" action="/shipments" method="post" id="shipment">
<table id="scan">
<thead>
<tr>
<th>#</th>
<th>Barcode</th>
<th>Part Number</th>
<th>Success</th>
</tr>
</thead>
<tbody>
<?php
foreach ($this->scan_items as $k => $item)
{
$count = $item['quantity'];
for ($i=0; $i < $count; $i++)
{
?>
<tr>
<td><?= $i + 1 . '.'; ?></td>
<td><input class="scan_item" type="text" name="items[<?= $item['id']; ?>][]" value="" required></td>
<td><?= $item['part_number']; ?></td>
<td class="result_cell"><input type="text" class="api_message" name="api_message" value="" disabled></td>
</tr>
<?php
}
}
?>
</tbody>
</table>
</form>
对于我的 Javascript,我从输入框中获取序列号,发送 ajax 调用,然后将结果放在该行的最后一个单元格中。结果进入的输入框被禁用,原因很明显。
// Validate shipment form, but get rid of messages
var validator = $("#shipment").validate({
errorPlacement: function() {
return false;
},
submitHandler: function() {
sendAjax('/shipments',['shipment']);
}
});
$('.scan_item').on('keypress', function(event) {
if (event.which == 13) {
$(this).closest('tr').next().find('.scan_item').focus();
var cell = $(this).closest('tr').find('.api_message');
var sn = $(this).val();
sendAjax('/check_sn&sn=' + sn, null, function(data) {
cell.val(data);
});
}
});
根据来自第二个输入框的输入(即禁用),使第一个输入无效的最佳方法是什么?我无法使结果输入框成为必需,因为它被禁用了,所以it will be ignored。
【问题讨论】:
-
为了澄清,您想在单独的文本字段中验证、返回和显示消息。如果消息不是“OK”,则将相应字段标记为无效。对吗?
-
@hitopp 是的,这是正确的。消息不必在文本字段中,可以在表格单元格中,但条形码输入字段应仅在 API 返回的消息为“OK”时才有效。
标签: javascript jquery html ajax validation