一个简单的问题,我确定,但我无法理解。
我从服务器返回了一些JSON
while ($Row = mysql_fetch_array($params))
{
$jsondata[]= array('adc'=>$Row["adc"],
'adSNU'=>$Row["adSNU"],
'adname'=>$Row["adname"],
'adcl'=>$Row["adcl"],
'adt'=>$Row["adt"]);
};
echo json_encode(array("Ships" => $jsondata));
...我在ajax调用中在客户端使用。应该注意的是,JSON被解析为一个全局声明的对象,以便以后可用,并且我假设你知道我正确地形成了ajax调用......
if (ajaxRequest.readyState==4 && ajaxRequest.status==200 || ajaxRequest.status==0)
{
WShipsObject = JSON.parse(ajaxRequest.responseText);
var eeWShips = document.getElementById("eeWShipsContainer");
for (i=0;i<WShipsObject.Ships.length;i++)
{
newElement = WShipsObject.Ships;
newWShip = document.createElement("div");
newWShip.id = newElement[i].adSNU;
newWShip.class = newElement[i].adc;
eeWShips.appendChild(newWShip);
} // end for
}// If
你可以在这里看到我在父div中创建了HTML DIV元素,每个新div都有一个id和一个类。您还会注意到我没有使用对象中返回的所有数据...
我使用JQuery来处理对象的点击,这是我的问题,我想要使用的是来自元素的id以返回另一个值,例如来自JSON的adt
值相同的指数。问题是在click事件中我不再知道索引,因为它是在元素创建之后的方式。即我不再在for
循环中。
那我该怎么做?
这是我尝试的内容,但我认为我错了树... .inArray()
在两个测试用例中都返回-1。请记住,该对象是全球可用的......
$(".wShip").click(function(){
var test1 = $.inArray(this.id, newElement.test);
var test2 = $.inArray(this.id, WShipsObject);
//alert(test1+"\n"+test2+"\n"+this.id);
});
答案 0 :(得分:0)
对于其中一个,您可以简单地使用DIV的ID属性来存储唯一的字符串,在您的情况下,它可以是索引。
我们在Google Closure / Javascript中执行类似的操作,如果您在循环中连接正在创建DIV的事件,则可以传入对“当前”对象的引用。
后者是更好/更清洁的解决方案。
答案 1 :(得分:0)
$(".wShip").click(function(){
var id = $(this).id;
var result;
WShipsObject.Ships.each(function(data) {
if(data.adSNU == id) {
result = data;
}
});
console.log(result);
}
答案 2 :(得分:0)
我无法找到找到索引的方法,但我在Devraj的答案中创建了一个变体。
在解决方案中,我创建了一个名为key
的自定义属性,我在其中存储了索引。
newWShip.key = i;
稍后当我再次需要索引时,我可以在JQuery this.key
方法中使用.click()
:
var key = this.key;
var adt = WShipsObject.Ships[key].adt;
你可能会说,实际上我可以将所有数据存储到自定义属性中,但我认为这将是不必要的重复内存。