1

JavaScript でオブジェクトを動的に作成しようとしています。私が書いたJSコードは次のとおりです。

var table = $("#eidtPersonalInfoTbl");
var trs = table.find('tr');

var obj = { };

$(trs).each(function(index, row){
     var field = $(row).find('td').eq(0).html();
     var value = $(row).find('td').eq(1).html();
     eval('obj.' + field + ' = ' + value );
});

テーブルの HTML マークアップは次のとおりです。

<table class="table" border="1" id="eidtPersonalInfoTbl">
<tr> 
    <td class="span3 hidden-phone" > Name </td>
    <td class="span5"> Name </td>       
</tr>
<tr>
    <td class="span3 hidden-phone"> Address</td>
    <td class="span5"> Address </td>
</tr>
<tr>
    <td class="span3 hidden-phone">Area</td>
    <td class="span5"> Area</td>                                        
<tr>
<tr>
    <td class="span3 hidden-phone">Gender</td>
    <td>Male</td>                                                       </tr>           
<tr> 
    <td class="span3 hidden-phone" > Salutation </td>
    <td class="span5"> Dr</td>                                      
</tr>   
<tr>
    <td class="span3 hidden-phone">State</td>
    <td class="span5"> State </td>                                          
<tr>
    <tr>
    <td class="span3 hidden-phone">City</td>
    <td class="span5"> City </td>                                       
</tr>
<tr> 
    <td class="span3 hidden-phone" > Postel Code </td>
    <td class="span5"> Postel Code </td>                                        
</tr>
<tr> 
    <td class="span3 hidden-phone" > Phone# </td>
    <td class="span5"> 04128741 </td>                                       
</tr>
<tr> 
    <td class="span3 hidden-phone" > Mobile# </td>
    <td class="span5"> 03218741525</td>                                     
</tr>
<tr> 
    <td class="span3 hidden-phone" > Cover Letter </td> 
    <td>Cover letter goes here</td>
</tr>                       
<tr>
    <td> <input type="submit" name="per-det" class="btn btn-success span5" value="Update and Cont."></td>
</tr>                                       

これを実行しようとすると、このエラーが発生します

未定義変数名

4

1 に答える 1

9

これを使用する方がはるかに簡単で、安全で、高速です。

obj[field] = value;

... の代わりにeval('obj.' + field + ' = "' + value + '"')、明らかに同じ目的を持っています。

value引用符で囲む必要があるため、現在表示されているものが表示されます。たとえば、 と の両方fieldが(文字列)valueと等しい場合'Name'、現在の評価された式は次のようになります...

obj.Name = Name

...明らかに「未定義の変数名」エラーを引き起こしています。


ここに 2 つの補足事項があります。trsまず、この行で再び jQuery オブジェクトをラップしても意味がありません...

$(trs).each(function(index, row)

...それはすでに jQuery オブジェクトであるため (の結果table.find('tr'))。この冗長性は、jQuery オブジェクトを格納するために使用されるすべての変数の名前の前に$.

var $table = $("#eidtPersonalInfoTbl");
var $trs   = $table.find('tr');
// ...

// $($trs) - obviously redundant

次に、次の行で DOM を 2 回実行するのは少し無駄です。

 var field = $(row).find('td').eq(0).html();
 var value = $(row).find('td').eq(1).html();

次のように書き直した方がいいでしょう。

 var $tds = $(row).find('td');
 var field = $tds.eq(0).html(); // or just $tds[0].innerHTML;
 var value = $tds.eq(1).html(); // or just $tds[1].innerHTML;
于 2013-11-13T08:50:35.507 に答える