【问题标题】:pass a multidimensional array element id as an option in a jquery function将多维数组元素 id 作为 jquery 函数中的选项传递
【发布时间】:2013-08-10 14:04:22
【问题描述】:

我是 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 的值... 我编写了一个函数来搜索正确的值,但是我在函数中发送密钥的部分给出了错误:未定义,我在“onchange”事件中只更改了 1 个 html txtboxes。

正确的做法:

感谢戴夫!!

<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>

【问题讨论】:

  • 在获取所有各种base.whatever 位之前,不要忘记包含if(!base)return 之类的内容。否则,只要在数组中找不到该值,它将写入大量日志警告。

标签: jquery multidimensional-array


【解决方案1】:

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

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;

(我也建议将你的代码分解一下以使用变量;一行中的所有内容都很难遵循。使用优化缩小器来创建压缩的发布版本)

【讨论】:

  • 啊,好的,我试试这个!
  • 完美!我会把完整的答案放在这里,因为现在它很混乱:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 2010-09-05
相关资源
最近更新 更多