2012-08-06 61 views
1

我一直在跑这个问题,这反映了我基本的理解不够。通过jquery函数传递元素

我想收集一个类的所有实例,然后能够有一个函数,它理解哪个元素实例调用它。

我创建了一个小提琴,http://jsfiddle.net/AKa4s/,这不起作用,只是试图解释我的问题。

就是这样,我收集所有的div元素&给它分配一个函数: $(“。square”)。each(writeColorpanel);

然后在那个函数中我需要调用另一个函数。下一个功能似乎完全不知道是谁打来的。我需要来电显示(笑话)。

问题是,我最终运行相同的计算不同的div,并重复该函数,以便我可以将css应用于每个div基于结果。

+2

您不能拥有多个具有相同'id'属性值的元素。 – 2012-08-06 14:06:06

+1

'.doChange()'方法来自哪里?它是一个插件吗? – 2012-08-06 14:08:03

+0

我的猜测是“onColorChange”函数内的“this”值引用了“当前元素”。 – 2012-08-06 14:10:33

回答

0

它是这样的:

$(function() { 
    $(".square").each(function(i,e) { 
     writeColorpanel(i,e); 
    }); 

    function writeColorpanel (i, elem) { 
     color=3;   
     onColorChange(elem, color); 
    } 

    function onColorChange(elem, color) { 
     var m = elem.value 
     var q = m*color; 
     $('#output_'+elem.id).val(q); 
    } 
}); 

FIDDLE

+2

请解释你改变了什么。 – 2012-08-06 14:11:11

+0

他将元素传递给onColorChange函数,这是您的“调用者ID”:) – 2012-08-06 14:14:36

+0

我明白。我想我以前曾尝试过这种方式,但它并不奏效,但您的例子显然确实如此。谢谢,我会在我有很长的icky noob代码中尝试。 :) – 2012-08-06 14:30:51

1

你这样做太复杂。

jQuery(document).ready(function($) { 


// run the function for every div 
$(".square").each(function(i) { 

    $('.output').eq(i).val(multiplyColor($(this).val())); 
    //Show the output to the 1st/2nd/3rd output (that's where eq comes from 
    //As for the value, I call a function and pass a parameter to do the calculations 

    //Now if you want to call another function you need to pass the element itself as a parameter; 
    alertMyId($(this)); 
}); 

function alertMyId(elem) { 
    //elem has now all the same properties as if you were in the "each" function  
    alert(elem.attr('id')); 

} 

//Ideally if you just want to calculate something, you should just pass along the value you want to calculate 
function multiplyColor(value) { 
    var color = 3; 
    return value * color; 
} 

}); 检查fiddle

此外,您不能有相同的ID不同的HTML元素。改用类。

+1

添加了代码,以防死链接或jsFiddle处于维护状态,以防止其他用户在将来查看代码。 – Nope 2012-08-06 14:21:16

+0

该Ids是一个错字,对不起。我的问题是,如果你必须调用另一个函数呢?在第一个函数中,您可以访问elem,因为您正在将函数附加到它。但是,现在如果每个“方形”都有一个值,并且您需要调用另一个函数对该值执行计算,然后将这些值重新放回到您开始使用的div中,那该怎么办? – 2012-08-06 14:23:21

+0

@JenniferMichelle你只需要传递元素(或称为ID)作为参数。我会用一个例子来更新我的答案。 – 2012-08-06 15:44:29