【发布时间】:2021-11-04 13:22:40
【问题描述】:
我有一个用 ColdFusion 编写的代码,它产生一个来自 SQL 查询的输入的列表,代码如下:
<cfquery datasource="#request.dsn#" name="getProdInfo">
Select * from dbo.Lines,dbo.[Shift],dbo.operations
where lineID=#form.SELLINE# and ShiftID=#form.SELSHIFT#
</cfquery>
<cfoutput query="getProdInfo">
<div class="control-group">
<label for="Ops">#OperationName# </label>
<input class="input-xlarge focused" id="prods" name="prod" placeholder="Enter Production"
type="number" validate="integer" />
<select name="Test" id="test">
<option>Option1</option>
<option >Option2</option>
</select>
</div>
<!--- Hidden Field--->
<input class="input-small focused" id="trgt" name="Target" value="580">
</cfoutput>
此代码生成 6 个输入字段、6 个选择和 6 个隐藏目标字段(对于结果集上的非 CFers cfoutput 循环)。我想执行一个 jQuery,如果输入字段小于目标的 70%,它应该启用 Select Dropdown 否则保持禁用。我的jQuery如下
<script type="application/javascript">
$('#prods').on('focusout', function(){
var element1 = document.getElementById("prods").value;
var element2 = document.getElementById("trgt").value;
var calc = (element1/element2)*100
if (calc<70){
$("#test").attr('disabled','disabled')
}
});
</script>
行为是,当 jQuery 测试第一个字段时,它会禁用第一个选择,但不适用于其他 5 个选择。我认为我的 jQuery 缺少为输入选择的元素的 ID。
我希望我已经澄清了我的观点。帮助表示赞赏
【问题讨论】:
-
您使用的是 jQuery,但也使用了
getElementById。这会在一段时间后变得混乱。也许坚持使用 jQuery 或 vanilla JS 来选择元素。 -
您的输入
ids 不是唯一的,因此您的jQuery 只影响第一个。您可以通过将#getProdInfo.currentRow#添加到 ID 来使它们独一无二。或者,您可以使用类而不是 id,然后循环document.querySelectorAll(assignedclassname)。不相关,但您的label的for属性是“Ops”,但您没有 ID 为“Ops”的元素。 -
@user1599011 对“id”提出了一个很好的观点。根据您稍后处理表单数据的方式,您可能还需要创建唯一的
name。与您的问题无关,但非常重要的是,该查询容易受到 sql 注入的影响。始终对用户值使用 cfqueryparam,例如#form#,#url#, etc... -
@user1599011 被邀请将他的评论放入答案中。
标签: javascript jquery coldfusion