2012-01-13 50 views
1

我试图用一些有效的Javascript来聪明点,但它让我头痛,无法搜索。Javascript - 使用类名指定要赋予哪个变量的值

我有一组输入在表中,每一个给定的类:

... 
<tr> 
<td><input name="name" type="text" class="markertitle"/></td> 
<td><input name="desc" type="text" class="markerdescription"/></td> 
<td><input name="address" type="text" class="markeraddress"/></td> 
<td><input name="url" type="text" class="markerurl"/></td> 
</tr> 
... 

我想利用这些类的值,使用它来指定给定的变量(其已经存在),然后将该输入的值(使用+ =)分配给该变量。

这是我想出,但没有喜悦:

var markertitle = {}; 
    var markerdescription = {}; 
    var markeraddress = {}; 
    var markerurl = {}; 
    $('#markermatrixadd input').each(function(){ 
     var field = $(this).attr('class'); 
     window[field] += $(this).val() + ','; 

    }); 

它死了简单的我敢肯定,但我认为我的大脑有点炸:(

+0

当心有多个类或类元素不匹配的变量。 – Stefan 2012-01-13 11:53:42

回答

4

你不要瓦尔“T似乎是全球性的他们必须任何函数之外声明除此之外,你不能为一个对象({})添加任何东西使用字符串或数组:。

var markertitle = "" 
var markerdescription = "" 
etc 

function() .... 

    $('#markermatrixadd input').each(function(){ 
     var field = $(this).attr('class'); 
     window[field] += $(this).val() + ','; 

    }); 

var markertitle = [] 
var markerdescription = [] 
etc 

function() .... 

    $('#markermatrixadd input').each(function(){ 
     var field = $(this).attr('class'); 
     window[field].push($(this).val()) 

    }); 

更重要的是,摆脱window,并使用一个单独的对象来存储所有的数据:

var data = { 
    markertitle: "", 
    markerdescription: "" 
} 

function() .... 

    $('#markermatrixadd input').each(function(){ 
     var field = $(this).attr('class'); 
     data[field] += $(this).val() + ','; 

    }); 
+0

谢谢!我用你的第三种方法。非常感激! :) – melat0nin 2012-01-13 12:18:18

+0

一点都不!另外,请注意上面的@ Stefan的评论。 – georg 2012-01-13 14:14:40