将多维数组元素id作为jquery函数中的选项传递

时间:2013-08-10 14:04:22

标签: jquery multidimensional-array

我是jQuery的新手,通常我会自己搜索,直到找到它,但我已经没时间了......所以我希望有人可以帮助我。

<select name="txtshort" id="txtshort">
    <option value="Achyranthes+AC0-and+AC0-Plantago+AC0-Formula">Ach+AC0-pl</option>
    <option value="Aconite+AC0-and+AC0-G.L.+AC0-Combination">Ac+AC0-gl</option> 
</select>
<input type="text" id="txtformula" name="txtformula" value="">
<input type="text" id="txtdose" name="txtdose" value="">
<input type="text" id="txtform" name="txtform" value="">

<script type="text/javascript" >
var array A=[
    {
        "mednr":"5",
        "short":"Ach+AC0-pl",
        "formula":"Achyranthes+AC0-and+AC0-Plantago+AC0-Formula",
        "dose":"250",
        "quant":"2/d",
        "form":"Tabletten"
    },{
        "mednr":"6",
        "short":"Ac+AC0-gl",
        "formula":"Aconite+AC0-and+AC0-G.L.+AC0-Combination",
        "dose":"2/d",
        "form":"Tabletten"
    }
]; 

jQuery(document).on("change", "#txtshort", function() { 
  jQuery("#txtformula").val(opzoekenMedicijn(jQuery("#txtshort").val(),"vorm"));
}).val( jQuery('#txtformula').val() ).change();

 var searchMed = function(afk, key){
 for (var i = 0; i < A.length; i++) {
    if (A[i].formule == afk){
        return A[i].key;   
    }
 }
};
</script>

因此,当我的选择框的值发生变化时,我想将txt框中的值更改为数组中的相应值。我使用公式作为搜索关键字,我希望txtdose中的A [i] .dose值和txtform中的A [i] .form的值... 我编写了一个函数来搜索正确的值,但是我在函数中发送密钥的部分给出了错误:undefined和van只在“onchange”事件中更改了1个html txtbox。

正确的方法:

感谢Dave !!

<select name="txtshort" id="txtshort">
<option value="Achyranthes+AC0-and+AC0-Plantago+AC0-Formula">Ach+AC0-pl</option>
<option value="Aconite+AC0-and+AC0-G.L.+AC0-Combination">Ac+AC0-gl</option> 
</select>
<input type="text" id="txtformula" name="txtformula" value="">
<input type="text" id="txtdose" name="txtdose" value="">
<input type="text" id="txtform" name="txtform" value="">

<script type="text/javascript" >
var array A=[
{
    "mednr":"5",
    "short":"Ach+AC0-pl",
    "formula":"Achyranthes+AC0-and+AC0-Plantago+AC0-Formula",
    "dose":"250",
    "quant":"2/d",
    "form":"Tabletten"
},{
    "mednr":"6",
    "short":"Ac+AC0-gl",
    "formula":"Aconite+AC0-and+AC0-G.L.+AC0-Combination",
    "dose":"2/d",
    "form":"Tabletten"
}
]; 
var searchMed = function(search){
  for (var i = 0; i < A.length; i++) {
    if (A[i].formule == search){
      return A[i];   
    }
  }
};

jQuery(document).on("change", "#txtshort", function() { 
  var base = opzoekenMedicijn( jQuery("#afkorting").val() ); 
  jQuery("#txtformula").val(base.formula);  
  jQuery("#txtdose").val(base.dose);
  jQuery("#txtform").val(base.form);
});


</script>

1 个答案:

答案 0 :(得分:0)

花了一段时间来弄清楚你在做什么,但问题是你是如何尝试获取命名属性的。

var myObject = {foo:"hi", bar:"bye"};
var lookFor = "foo";
console.log( myObject.lookFor ); // undefined: myObject has no attribute "lookFor"
console.log( myObject[lookFor] ); // "hi": lookFor = "foo", myObject.foo is "hi"

所以将.key更改为[key]即可。

更典型的方法是返回对象:

function opzoekenMedicijn( search ) {
    for (var i = 0; i < arrayFromPHP.length; i++) {
        if (arrayFromPHP[i].formule == search){
            return arrayFromPHP[i]; 
        }
    }
};

然后像这样使用它:

var value = opzoekenMedicijn( "lookForThis" ).formule;

虽然您需要注意不要搜索不存在的密钥,或特别处理退货:

var found = opzoekenMedicijn( "lookForThis" );
var value = found && found.formule;

(我还建议稍微破坏你的代码以使用变量;一行上的所有内容都难以理解。使用优化缩小器来创建压缩版本)