2013-09-13 6 views
1

Я заполняю список флажков на вызов Ajax, и я пытаюсь установить, какие флажки отмечены, и я получаю только первое значение. Пожалуйста, помогите мне, если я ошибаюсь.Моя функция не возвращает все отмеченные значения

Мой Html:

<%@ Control Language="C#"Inherits="System.Web.Mvc.ViewUserControl<EmsAdmin.Models.User>" %> 
<%= Html.ValidationSummary("Edit was unsuccessful. Please correct the errors andtryagain.") %> 
<% using (Html.BeginForm(null, null, FormMethod.Post, new { name = 
"VerficationForm", id = "VerficationForm" })) 
{%> 
<%= Html.AntiForgeryToken() %> 
<%: Model.Id %> 
<h2>Go For All/Individual Brands</h2> 
<p> 
<input type="checkbox" id="checkBoxAllSelect" class="checkBoxAllSelect" value="All" /> 
All 
<br /> 
<input type="checkbox" id="checkBox1Individual" class="checkBox1Individual" 
value="Individual" /> 
Individual 
<br/> 
<input type="button" value="GetBrands" class="getBrands" /> 
</p> 
<hr /> 
<h2>Multi Select Brands If Required:</h2> 
<div id="checkboxes" class ="divNewBrandsList"> 
</div> 
<hr /> 
<h2>Countires For Each Brand:</h2> 
<div id="checkboxescountries" class="divNewCountriesList"> 
</div> 
<hr /> 
<% } %> 

Сценарий:

<script type="text/javascript"> 
$('.getBrands').hide(); 
function myBrandsfunction() { 
    var selectedBrands = ""; 
    var manu = ""; 
    var input = ""; 
    $("#checkboxes input:checked").each(function() { 
     manu = $(this).val(); 
     alert("Brand value:" + manu); // Here I am getting only one Selected checkbox but not all. 
     selectedBrands = selectedBrands + "," + manu; 
     alert("Selected brands:" + selectedBrands); 
     var productInput = ""; 
     var myUrl = "/Countries/GetCountiresForManufacturer/" + selected + "/" + input; 
     $.ajax({ 
      url: myUrl, 
      type: 'get', 
      success: function (data) { 
       productInput = data; 
       $(".divNewCountriesList").html(productInput); 
      } 
     }); 
    }); 
} 

Контроллер:

/// <summary> 
    /// GetBrands for Organisation 
    /// </summary> 
    /// <returns></returns> 
    [Authorize(Roles = "Administrator")] 
    [AcceptVerbs(HttpVerbs.Get)] 
    public string GetBrandsForOrganisation(string organisation) 
    { 
     var sb = new StringBuilder(); 
     // var brandsList = new List<String>(); 
     if (organisation == null) 
     { 
      return ""; 
     } 
     else 
     { 
      var corporation = _corporationRepository.GetCorporationByName(organisation); 
      if (corporation != null) 
      { 
       // Get Manufactuerers 
       var brands = _corporationManufacturerRepository.GetAllManufacturersForCorporation(corporation.Id); 

       sb.Append("<div id = \"" + organisation + "\">"); 
       foreach (var brand in brands) 
       { 
        sb.Append("<input id =\"" + brand.Manufacturer.Id + 
           "\" type=\"checkbox\" class=\"checkboxBrand\" value=\"" + 
           brand.Manufacturer.Description + "\"/>" + brand.Manufacturer.Description); 
        sb.Append("<br />"); 
       } 
       sb.Append("<br />"); 
       sb.Append("</div>"); 
      } 

     } 
     sb.Append("<input type=\"button\" value=\"GetCountries\" onclick = \"myBrandsfunction()\"class=\"brands\"/>"); 

     return sb.ToString(); 
    } 
+0

Можете ли вы попытаться сузить свой код, чтобы именно там, где происходит ошибка, люди, вероятно, просеять через все, что код, чтобы найти что-то неправильно нет. –

+0

@RichardDalton удален –

ответ

0

Я считаю, что проблема у Вас есть то, что он обновляет все, но только последний жив, потому что вы постоянно заменяете html .divNewCountriesList своим последним ответом. Вы, вероятно, нужно создать массив/длинную строку:

var checkedItems = $("#checkboxes input:checked"); 

var productInputList = []; 

checkedItems.each(function (index,element) { 
    manu = $(this).val(); 
    alert("Brand value:" + manu); // Here I am getting only one Selected checkbox but not all. 
    selectedBrands = selectedBrands + "," + manu; 
    alert("Selected brands:" + selectedBrands); 
    var productInput = ""; 
    var myUrl = "/Countries/GetCountiresForManufacturer/" + selected + "/" + input; 


    $.ajax({ 
     url: myUrl, 
     type: 'get', 
     success: function (data) { 
      productInput = data; 
      productInputList.push(productInput); 
      if (index == checkedItems.length - 1) { 
       //Reached end of list... populate 
       $(".divNewCountriesList").html(productInputList.join(' ')); 
      } 
     } 
    }); 
}); 

В качестве альтернативы можно использовать отложенную как предложено here, чтобы избежать грязной проверки индекса/быть удивительным.

+0

@J Торрес Спасибо за сообщение. Но я не ценю. То, что я ожидаю, это если проверено. Я думаю, что Dove, конечно, мой ману должен быть Dove, а затем выбрано =, Dove и next. Sure manu = sure and Selected =, Dove. Конечно, это результат, которого я ожидаю, но теперь я просто получаю Dove и мои url также нулевой. –

+0

Я не понимаю ваш комментарий или «Голубь». –

+0

@J Торрес Я сказал, например, Голубь. –

0

Может быть проблема:

У вас есть:

$("#checkboxes input:checked") 

.... но ваш DIV выглядит ...

<div id="checkboxes" class ="divNewBrandsList"> 

Это идентификатор дело .. .try изменение идентификатора флажков.

===================== UPDATE ======================

Это тоже кажется странным:

//This line is storing just one value and its normal 
manu = $(this).val(); 

Но важной частью является .ajax вызов внутри цикла Еогеасп, как раз, почему ?? ... значение ввода в URL также пусто.

Здесь:

var myUrl = "/Countries/GetCountiresForManufacturer/" + selected + "/" + input; 
+0

Я тоже думал, что это проблема, но я считаю, что мы не видим код, который вводит вывод 'GetBrandsForOrganisation' в' # checkboxes' –

+0

Обновление моего ответа ..... – Hackerman

Смежные вопросы