我嘗試使用this question的答案,但沒有成功。以下是我的HTML的縮寫版本。例如,如果用戶使用6臺路由器創建訂單,則當另一用戶爲訂單創建貨件時,我在表格中創建6行,以便用戶可以掃描路由器的條形碼。條碼通過ajax調用進行驗證。如果一切正常,api將返回「OK」。如果api結果不是「OK」,我想使條形碼輸入無效。動態元素和ajax的jQuery驗證插件
<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
@hitopp是的,這是正確的。消息不必位於文本字段中,它可以位於表格單元格中,但條形碼輸入字段只有在API返回的消息爲「確定」時纔有效。 – GreeKatrina