$(function(){
$("#herb_pinyin").autocomplete({source: "api_herbs.php"});
$.extend(bindings, {
ingredients: ko.observableArray(),
newIngredient: {
pinyin: ko.observable(""),
dosage: ko.observable(""),
dosageType: ko.observable("g")
}
});
ko.applyBindings(bindings);
});
function addIngredient() {
if (!bindings.newIngredient.pinyin()) return;
bindings.ingredients.push({
pinyin: bindings.newIngredient.pinyin(),
dosage: bindings.newIngredient.dosage(),
dosageType: bindings.newIngredient.dosageType(),
});
bindings.newIngredient.pinyin("");
bindings.newIngredient.dosage("");
bindings.newIngredient.dosageType("g");
$("#herb_pinyin").focus();
}
<div data-bind="foreach:ingredients">
<div>
<span data-bind="text:pinyin"></span>,
<span data-bind="text:dosage"></span><span data-bind="text:dosageType"></span>
</div>
</div>
<div data-bind="foreach:ingredients">
<input type="hidden" data-bind="value:pinyin, attr:{name:'pinyin-'+$index()}" />
<input type="hidden" data-bind="value:dosage, attr:{name:'dosage-'+$index()}" />
<input type="hidden" data-bind="value:dosageType, attr:{name:'dtype-'+$index()}" />
</div>
<input name="herb_pinyin" type="text" id="herb_pinyin" placeholder="herb name in pinyin" size="30" data-bind="value:newIngredient.pinyin" />
<input name="dosage" type="text" id="dosage" placeholder="enter amount" size="13" data-bind="value:newIngredient.dosage" />
<select name="dosage_type" id="dosage_type" data-bind="value:newIngredient.dosageType" >
<option value="g" selected="selected">g</option>
<option value="pcs">pcs</option>
</select>
<input type="button" name="button" id="button" value="Add" onclick="addIngredient()" />
添加成分功能按钮在 chrome 和 IE 中没有任何作用;在 Firefox 中运行良好。关于它为什么不起作用的任何线索?基本上单击添加按钮稍后将执行对 mysql 的更新。
在 api_herbs.php 我从数据库中获取用于 autcomplete 的草药列表并放入 json:
$results = array();
while ($row = mysql_fetch_object($rsList))
$results[] = $row->pinyin;
print json_encode($results);
我尝试了添加 bindings.addIngredient = addIngredient; 的建议。但这没有任何明显的影响。