2011-08-19 88 views
0

我有一個CSHTML動態形成的錨標籤不調用點擊功能

<td id="device-body"> 
    <ul> 
     <li id="devicesInOffice"></li> 
    </ul> 
</td> 

,我試圖動態填充錨標記列表的L1標籤(如下圖所示)

function populateDevicesAvailable(deviceType) { 
    if (deviceType.id != "") { 
     $.post(window.getOfficesDevicesUrl, { devicetypeId: deviceType.id }, 
     function (results) { 
      var items = ""; 
      $.each(results, function (i, device) { 
       items += 
"<a id='" + device.Id + "' href= '" + "#" + "'  
       class='devices'  
       onclick='javascript:populateDeviceInfo()'>" + device.Name + "</a>"; 
      }); 

      $("li#devicesInOffice").append(items); 

     }); 
    } 
    else { 
     $("li#devicesInOffice").html(""); 
    } 
}; 


function populateDeviceInfo() { 
} 

populateDeviceInfo函數永遠不會被調用。當我單擊超鏈接時,我只會得到一個「對象預期」錯誤。

我也試過其他方式(下面)來調用該函數,但沒有任何工作。

$(".devices").click(function() { 
    populateDeviceInfo(); 
}); 

$("li#devicesInOffice a").click(function() { 
    populateDeviceInfo(); 

有人可以幫我找到一種方法來調用函數。 謝謝,

回答

2

使用live,每次插入元素到DOM動態事件處理程序沒有得到重視,然後自動

$(".devices").live('click', function() { 
    populateDeviceInfo(); 
}); 
+0

Thanks.Got現在工作。 – Lavan

+0

很高興幫助 - – Rafay

0

是的,沒錯,在處理程序註冊後添加的鏈接不會受到影響。這就是爲什麼有.live().delegate()方法的jQuery。

Example

+0

Thanks.Got It working now。 – Lavan

+0

@Laven,如果我的回答是正確的,請批准它作爲正確答案(點擊數字下的空白** V **)。 –

0

如果是動態生成的元素,那麼click功能不會影響,因爲click只綁定到已經存在的元素。您需要使用live[docs]函數:

$(".devices, li#devicesInOffice a").live("click", function() { 
    populateDeviceInfo(); 
} 

你會發現,你可以同時使用多個jQuery選擇。這樣,您不必重複您的代碼。

+0

Thanks.Got現在工作。 – Lavan

0

使用delegate()[docs]方法處理程序分配給握着你.devices元素的容器。

$(function() { 
    $('#devicesInOffice').delegate('.devices','click', populateDeviceInfo); 
}); 

這會將#devicesInOffice元件上的單個處理程序(只要它是本加載頁面時)。

的是,當點擊該.devices選擇器相匹配的任何嵌套元件上發生的處理程序將被調用。