2013-04-02 57 views
0

我知道這可能聽起來像相當微不足道的問題,但我如何實現如下:在一個局部視圖訪問div元素(即,重複)使用jQuery

我有2次,1個部分和1個索引。

在索引中,我有一個循環遍歷模型列表並將每個項目傳遞給部分視圖。

現在對於模型列表中的每個項目,我希望能夠進行模態對話。即對於用戶帖子列表,每個帖子都有一個買或賣按鈕。所有這些都使用相同的div /模式。有沒有什麼辦法可以從該模式對話框中檢索文本框值,特別是對於我點擊了「立即購買」按鈕的對話框?

代碼:

Index

@model IEnumerable<BRApplication.Models.MarketPost> 

@{ 
    foreach (var m in Model) { 
      if (m.IsBuy) { 
       <li> 
         @Html.Partial("BuyPost_Partial", m) 
       </li> 
      } 
    } 
} 

BuyPost_Partial &有這樣的:

<div id="mdlEmail" class="none"> 
    Please enter an email the owner of this book can contact you with. <br/> 
    @Html.TextBox("txtRespondantEmail", "", new { id = "txtRespondantEmail" }) 
</div> 

我希望能夠獲得txtRespondantEmail文本框的值。

請幫忙!我一直堅持這一點。關於如何讓這個文本框對每個帖子都是唯一的任何想法?我不知道我怎麼會訪問ID,如果我追加一個ID給它要麼:S

ØJS的模態(我把它放在Index.cshtml文件)

> function EmailDialog() { 
>   // alert("email"); 
>    $("#mdlEmail").dialog({ 
>     height: 200, 
>     width: 500, 
>     modal: true, 
>     buttons: { 
>      "Confirm": function() { 
>       MailNow(); 
>       $(this).dialog("close"); 
>      } 
>     } 
>    }); 
>   } 

在MailNow()函數,我試着用這條線的jQuery的訪問文本框的值:

var RespondantEmail = $("#txtRespondantEmail").val(); 

現在購買處理程序:

> $(function() { 
>    $("#btnBuyNow").click(function() { 
>     var email = $("#email").text(); 
>     alert(email); 
>     if (email) { 
>      EmailDialog(); 
>     } else { 
>      FacebookLink(); 
>     } 
>    }); 
>   }); 

該文本框是在EmailDialog()

+0

我沒有看到你的部分按鈕。你有每個項目的buynow按鈕嗎? –

+0

@DaveA是的,我確實有一個立即購買按鈕在HTML中是太長,我粘貼它在這裏哈哈,但是是有一個立即購買按鈕 – anpatel

+0

請分享您的事件處理程序爲您的現在購買按鈕 –

回答

2

,因爲您是通過Model迭代,我相信會有你的部分中多次出現。因此,您不應將id='txtRespondantEmail'指定給文本框,因爲id意味着您只有一個此類元素。讓它成爲一個班級:class='txtRespondantEmail'你也需要一個。您還需要一些文本框上的唯一標識符。您的MarketPost是否有ID?如果是這樣,請將屬性ID放在它上面:id='txtRespondantEmail-'@Model.Id

然後你就可以得到你的價值這樣的:

var val = $('#txtRespondantEmail-1').val(); 

更新

爲什麼你需要的值這將是更合適的問你?當在該文本框中鍵入內容時,您可能想要調用服務器?如果是這種情況,請在文本框旁邊創建一個按鈕。給它上課,說:'btn-save'。然後做一個Ajax調用服務器,你將保存這樣的值:

$(document).on('click', '.btn-save', function(){ 
    var val = $(this).siblings('.txtRespondantEmail').val(); 
    $.ajax({ 
     url: '/controllername/actionname/', 
     type: 'POST' 
     data: new { text: val }, 
     success: function(data){ 
      alert('done'); 
     } 
    }); 
}) 
+0

我將如何訪問該特定的職位?我的意思是跟蹤我的jQuery中的計數器? – anpatel

+0

查看我的回答更新 – Dmitry

+0

我認爲這是最好的主意!非常感謝! :d – anpatel

0

我不知道你的模型是什麼樣子,但有什麼在模型中,你傳遞給部分視圖是唯一的,以便您可以將它附加到文本框的ID。

例如是你碰到這樣的m.ID,你可以嘗試

@Html.TextBox("txtRespondantEmail", "", new { id = "txtRespondantEmail" + m.ID }) 

我沒有VS所以我現在無法測試這一點,但你可以給它一個嘗試。

$(「[ID^=‘txtRespondantEmail’]」) - 這將返回所有以開頭的所有文本框「txtRespondantEmail」

+0

如果我將文章的ID添加到文本框的ID中,如何從jQuery中訪問它?這就是我現在遇到的問題。如何通過 – anpatel

+0

您可以獲取使用jQuery創建的所有文本框。我編輯了我的答案以反映這一點。 – Flavia

+0

對不起,我的意思是如何跟蹤我所處的文本框。就像用戶點擊「確認」按鈕時一樣,我怎麼知道文本框被編輯過(索引是什麼) – anpatel