2012-07-06 46 views
0

很明顯,我做錯了什麼。我從來沒有能夠讓.click()工作,但其他jQuery調用工作正常。MVC3-使用jQuery將onclick事件添加到鏈接

我有以下JavaScript函數:

function showParamsFor(divID) { 
     //Code here works when the function is called through onclick attribute 
    } 

然後,我基本上有以下情形:

int index = 0; 
    foreach (var op in Model.Operations) 
    { 
     <div id="param_container[@(index)]" 
      <a id="show_params[@(index)]" href="#"> 
      Edit Parameters 
      </a> 
     </div> 
     index++; 
    } 

    int total = index; 
    <script type="text/javascript" src="~/Scripts/jquery-1.6.2.min.js"></script> 
    for (int i = 0; i < total; i++) 
    { 
     <script type="text/javascript"> 
      $(document).ready($('#show_params[@(i)]').click(function() { 
       showParamsFor('#param_container[@(i)]'); 
      }); 
     </script> 
    } 

對於我的生活,我似乎無法得到這個工作。除了。點擊(),我已經使用以下方法嘗試:

.live('click', function()) 
.bind('click', function()) 

我試着刪除$(文件)。就緒並在每個場景中添加回去,但點擊該鏈接時,沒有任何反應。

我已經雙重檢查了我的id名稱,甚至嘗試使用類名稱作爲鏈接(.show_params [@(i)])而不是id。 Whaat我在這裏做錯了嗎?

編輯

我使用一個循環,因爲我有這些鏈接的動態列表。我需要在每個鏈接都需要對每個其他鏈接的引用後爲每個鏈接綁定一個點擊事件。

+1

你意識到你正在嵌入儘可能多的腳本,因爲索引是正確的嗎?這似乎是一個不好的方法來做到這一點。 – TheZ 2012-07-06 20:09:54

+0

您可以在腳本標記內運行一個循環的剃鬚刀,以便您擁有一個具有一個document.ready事件的腳本,並將該方法調用N次。還有更好的方法,但這至少會削減腳本。 – Tyrsius 2012-07-06 20:11:28

+0

ViewBag.index是否返回唯一索引?如果是這樣,只需將錨標記的標識設置爲索引,然後將其傳遞給showParamsFor()。或者使用html5數據參數,並從中獲取id(不知道jquery 1.6是否支持它) – 2012-07-06 20:14:49

回答

0

感謝您的答覆,但我已經想通了,我的問題。

  1. 我經過 '#param_container [@(我)' 到我showParamsFor功能時,我應該已經通過 'param_container [@(我)' 進去。沒有哈希標籤。

  2. 一個更重要的問題......我的id中的括號沒有被jQuery識別。我讀過,你可以使用\\作爲括號前的轉義字母,但自然..這不適合我。我將我的ID從'param_container [@(i)]'更改爲'param_container - @(i)'。

一切似乎都很好。這是我的最終腳本:

<script type="text/javascript" src="~/Scripts/jquery-1.6.2.min.js"></script> 
    <script type="text/javascript"> 
     for (var i = 0; i < total; i++) 
     { 
      $(document).ready(function() { 
       $('#show_params-'+i).live('click', function (data) { 
        showParamsFor('param_container-'+i); 
       }); 
      }); 
     } 
    </script> 
2

我將向a標籤添加一個css類,以便我可以將它用於我的jQuery選擇器來綁定點擊功能。

foreach (var op in Model.Operations) 
{ 
    <div id="param_container[@(ViewBag.Index)]" 
     <a id="show_params[@(ViewBag.index)]" href="#" class="thatClass"> 
     Edit Parameters 
     </a> 
    </div> 
    ViewBag.Index++; 
} 

你的腳本應該是

$(function(){ 
    $(".thatClass").click(function(e){ 
    e.preventDefault()'; //if you want to prevent default behaviour 
    var item=$(this); 
    alert(item.attr("id"); 
    alert(item.parent().attr("id"); 

    }); 
}); 

這應該工作

不知道爲什麼你使用ViewBag項目給了元素的標識! 。

如果你有一個ID(一些其他財產,給你的獨特價值,你應該考慮使用像這樣(假設你有哪些具有獨特的值的集合中的每個項目)

foreach (var op in Model.Operations) 
{ 
    <div id="[email protected]" 
     <a id="[email protected]" href="#" class="thatClass"> 
     Edit Parameters 
     </a> 
    </div>  
} 
ID財產

恕我直言,上面的代碼看起來比一個使用ViewBag

+0

我正在使用編輯器模板,並且正在創建鏈接。而腳本是在原始視圖中創建的。我傳遞值的唯一方法是通過ViewBag。這就是說..我不太確定你在用這個代碼做什麼。你如何建議我引用我的showParamsFor()函數? – 2012-07-06 20:43:21

+0

爲了清晰起見,我刪除了對ViewBag的引用。 – 2012-07-06 20:49:31

0

還是不明白,你爲什麼不想在這裏使用一個自定義的循環清潔。 jQuery代碼將足以在這裏。 首先,添加你的元素。然後,您的文檔準備應該是這樣的:

 $(document).ready(function() { 
      $('a[id^=link]').live('click', function(data) { 
       alert($('#links').children().index(this)); 
      }); 
     }); 

UPD 小樣本是在這裏: http://jsbin.com/ahafel/2