我有很多服装的订单;它使用来自数据库的级联选择来填充。表单的下一部分是一系列输入字段,用于输入每个尺寸的数量。有13种尺寸,从YXS-4XL。我想为我的数据库项目提供一个属性,该属性将禁用该特定服装不可用的大小的输入字段。
最好的方法是什么?目前,我所能想到的是在数据库中为每个大小插入一个列,然后调用它在表单上返回true或false。但这似乎不是最好的方法。请记住,我有很多数据库项目可以执行此操作。
答案 0 :(得分:0)
您可以使用jquery
禁用此类字段 $('selector').attr('disabled', 'disabled');
再次启用
$('selector').removeAttr('disabled');
答案 1 :(得分:0)
为了缩短您可以使用单标志列(整数)的内容,逐位指示每篇文章可用的尺寸。标志值由这些值组成,这些值对应于可用的大小:
flag size 2^ (bit no.)
1 XS 0
2 S 1
4 M 2
8 L 3
16 XL 4
等等。要使mutliples大小可用,只需输入两个大小标志的总和:
6 S,M
可以使用MySQL,PHP和JavaScript中的按位AND
运算符(&
)轻松检查各个大小。标准int
列(4个字节)已经允许您跟踪多达32种不同的大小及其所有可能的组合。
在SQL语句中,当您想确保大小M可用时,您只需使用WHERE子句
WHERE flag&4 > 0
或者在JavaScript部分中,您可以使用active = xl_flg & flag > 0
之类的内容轻松确定要激活的复选框,其中flag
是包含MySQL列中的值的变量(可能通过AJAX接收),xl_flag是输入字段的属性(或来自周围的<div>
)。然后,您可以对active
(true或false)的值hide()
或show()
输入元素进行操作。
如果您想在后台设置或取消设置项目的可用性,只需执行此操作(PHP):
// working with constants makes your life easier ... ;-)
define("XS", 0);
define("S", 1);
define("M", 2);
define("L", 4);
define("XL", 8);
// typically the following information is provided by an AJAX post
// for example by adding the values of checked checkboxes ...
$sizes= S + M + XL; // = 11
-- set (MySQL query string in PHP):
$sql = "UPDATE ... SET flag = flag & $sizes WHERE ... ";
-- unset
$sql = "UPDATE ... SET flag = flag & ~$sizes WHERE ... ";
~
反转数字中的所有位(行为类似于逻辑NOT
)。 &
和~
的组合会关闭第二个操作数中设置的位。
答案 2 :(得分:0)
在 onchange 服装输入字段时使用AJAX调用。
{'garment' : 'garment_name_or_id'}
然后PHP检查数据库中的可用大小并返回。
echo json_encode($mysql_result);
然后使用prop()禁用输入字段。
$("input").prop('disabled', true);