2015-08-17 3 views
0

Это то, что у меня есть до сих пор. У меня есть представление, в котором отображается дата, о которой я не сообщал.Выберите несколько элементов с помощью javascript/asp.net

Моя идея - отметить даты, когда я хочу сообщить время, поэтому я могу сообщить время для нескольких дат, и если бы я проверил дату, я не хочу сообщать об этом, просто снимите этот флажок.

У меня это работает, (kinda) Проблема в том, что если я хочу выбрать дату, мне всегда нужно будет выбрать первое в списке, прежде чем я смогу проверить любую другую дату.

Как это: enter image description here

Это прекрасно работает до тех пор, как я всегда выбираю первую дату в списке.

Но это не то, что я ищу, я хочу вариант, чтобы я мог сообщать любые данные без предварительной проверки первой даты. Это не будет работать, потому что я не проверял первую дату: enter image description here

Это мой сценарий:

var dateArr=new Array(); 
function SetDate(dt) { 
    if(document.getElementById("isoDate").checked) { 
     if(dateArr.indexOf(dt)<0){ //Check if date is already added. if not add it to array. 
      dateArr.push(dt); 
    } 
    else{ 
     var index=dateArr.indexOf(dt); 
     if (index > -1) { 
      dateArr.splice(index, 1);//Remove from array if checkbox uncheck 
    } 
    } 
    $('#date').val(dateArr.join(" ")); //Add space separated string to the #date element. 
} 
} 

И это мой взгляд, где я получаю даты:

@foreach (var date in ViewBag.MissingDays) 
{ 
    var isoDate = date.ToString("yyMMdd"); 
    <div class="col-md-1"> 
     <input type="checkbox" id="isoDate" name="isoDate" value="@isoDate"onclick="javascript:SetDate('@isoDate');" /> 
     @isoDate 
    </div> 
} 

ответ

1

Есть некоторые замечания относительно вашего кода, например, не очень хорошая практика иметь несколько элементов с одним и тем же идентификатором (я могу сказать, что это плохая практика, я говорю о чеке kboxes, то же самое имя должно быть достаточно) или строки вроде:

if(document.getElementById("isoDate").checked) 

что разрушает все (это я думаю, что это реальный источник вашей проблемы, так как результат является первым элементом, а не проверяется шагнет на другой)

Увидев, что вы используете jquery, here, у вас есть небольшой образец того, как это должно выглядеть.

+0

Я немного не уверен в этой строке 'input [name = "isoDate"]' что это значит? –

+0

Это селектор. Постарайтесь узнать больше о селекторах jquery, это будет хорошее место для запуска: https://api.jquery.com/attribute-equals-selector/. На самом деле вы уже использовали селекторы в своей строке: $ ('# date'). Val (dateArr.join ("")); – avi

+0

Действительно, просто никогда не видел, как вы это делали раньше. По какой-то странной причине я не заставляю его функционировать так, как должен, значения не меняются. Но он работает над Jsfiddle, так что это что-то на моем конце. Спасибо за быстрый ответ. –

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