如何验证所选选项只能使用一次,而不是两次,可以吗?

how to validate the selected option to only one time can be used, not double, can it?

我是cakephp的初学者,请帮助我。当我想在 cakephp 表单中验证输入类型 selected 时,我卡住了,数据很详细,那里有很多行,第一行。

<select id="AirWayBillDetail0ItemId" name="data[AirWayBillDetail][0][item_id]">
<option value="">-- Select an Item --</option>
<option value="9">Handphone</option>
<option value="10">Accecoris</option>
<option value="11">Alat Tulis Kantor</option>
<option value="12">Voucher Fisik</option>
</select>

我要选件,一次就可以用

示例: 添加第一行,我select手机, 所以,第二行,不能使用那个选项。有什么办法可以解决我的问题吗?

我可以在模型、视图或控制器中进行验证吗?使用 javascript 或 jquery?

您可以使用 jQuery 来实现它。 请参考这个 fiddle http://jsfiddle.net/sqy1n6n3/1/

$('select').on('change', function() {

    $('select').find('option').prop('disabled', false);

    $('select').each(function() {
       $('select').not(this).find('option[value="' + this.value + '"]').prop('disabled', true); 
    });

});

您想在模型或控制器层中检查它。永远不要依赖 JavaScript 进行验证,因为这会导致您的应用程序出现漏洞(JavaScript 很容易被禁用)。您应该始终在服务器端进行验证,如果您需要一些额外的内联验证,可以通过客户端验证对其进行补充。

您想添加一项检查以确保您提交的数据中没有重复项 item_id。所以你可以在你的控制器中做类似下面的事情:-

$itemIds = Hash::extract($this->request->data, 'AirWayBillDetail.{n}.item_id');
if (count($itemIds) !== count(array_unique($itemIds))) {
    // Invalid item_ids
} 

然后您需要处理您希望错误消息的显示方式并确保它不会继续保存。如果你想在模型中执行此操作,你需要查看使用 beforeSave() 回调在保存之前检查 $this->data 和 return false 如果重复被识别。