【发布时间】:2018-02-26 06:00:04
【问题描述】:
我正在处理yii2。我在我的表格中使用typeahead。现在有一个用例,用户将使用barcode scanner 扫描barcode,然后它的输入将显示在typeahead 中。目前,一切正常。
但我想尽量减少用户输入错误,不要在打字头中输入任何内容,而是他会扫描条形码,然后扫描的值将出现在文本框下方,用户将点击它,因此输入框将被填充.有关参考,请参见下图。
下面是我的代码。
查看
<style>
span.twitter-typeahead{
width: 100%;
}
</style>
<?php if($model->isNewRecord){?>
<label class="control-label">Select Meter #</label><br />
<input type="text" id="the-meter-id" class="form-control col-md-12" value="<?=$model->meter_id?>"/>
<div style="clear: both;"></div>
<div id="selected_meter_container" ></div>
<div style="clear: both;"></div>
<label class="control-label">Select IMSI #</label><br />
<input type="text" id="the-sim-id" class="form-control col-md-12" value="<?=$model->sim_id?>"/>
<div style="clear: both;"></div>
<div id="selected_imsi_container" ></div>
<div style="clear: both;"></div>
<?php } ?>
JS
$urlsim = Url::toRoute('/metertosimmapping/sim');
$(document).ready(function (){
var surveyReferences = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('imsi'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: 'survey',
remote: {
url: '$urlsim?q=%QUERY',
wildcard: '%QUERY'
}
});
$('#the-sim-id').typeahead(null, {
limit: 50,
name: 'ref-numbers',
display: 'imsi',
source: surveyReferences,
suggestion: function(data) {
return '<p><strong>' + data.id + '</strong> – ' + data.imsi + '</p>';
}
}
);
jQuery('#the-sim-id').on('typeahead:selected', function (e, datum) {
$('#selected_imsi_container').html('');
$('#metertosimmapping-imsi').val('');
$('#metertosimmapping-sim_number').val('');
$('#metertosimmapping-operator_name').val('');
//$('#metertosimmapping-sim_status').val(datum.sim_status);
$('#metertosimmapping-historic').val(datum.historic);
var html = '<div class="selected-imsi"><input type="hidden" name="selected_imsi[]" value="'+datum.id+'" />'+datum.imsi+'<a onclick="$(this).closest(\'.selected-imsi\').remove()">X</a></div>';
$('#selected_imsi_container').append(html);
$('#metertosimmapping-imsi').append(datum.imsi);
$('#the-sim-id').typeahead('val','');
$('#metertosimmapping-sim_number').val(datum.sim_number);
$('#metertosimmapping-operator_name').val(datum.operator_name);
//$('#metertosimmapping-sim_status').val(datum.sim_status);
$('#metertosimmapping-historic').val(datum.historic);
});
});
我已经检查了这个solution,但它是用于自动完成的,我正在使用预输入。
如何在前面表单的特定文本框中禁用键盘输入,并允许用户将值扫描到该文本框(USB 扫描仪)
更新 1
好的,我已经完成了第一部分,即通过执行以下操作禁用用户输入
<input type="text" id="the-sim-id" class="form-control col-md-12" onkeydown="return false" value="<?=$model->sim_id?>"/>
现在它确实禁用了用户输入,但也禁用了扫描仪输入。如何允许用户将值扫描到该文本框(USB 扫描仪)?
任何帮助将不胜感激。
【问题讨论】:
-
如果你想完全排除用户输入,为什么不在输入上使用
disabled属性,你仍然可以以编程方式更新值。 -
@MuhammadOmerAslam 我尝试过使用
disabled,但我再次无法从扫描仪中获得价值 -
如果您使用
$("#input").Val(scanner_val)手动添加来自扫描仪的值,它将 -
或者像我上面说的那样让扫描仪瞄准一个隐藏的输入并手动将值复制到可见的禁用输入
-
@MuhammadOmerAslam 它应该直接从扫描仪输入
标签: jquery user-input barcode-scanner yii2-advanced-app twitter-typeahead