0
<input type="hidden" id="amenities" value="@Model.Amenities" /> 

    <script type="text/javascript"> 

$(function() { 


    arr = new Array(); 

    var str = document.getElementById("amenities").value; 

    arr = str.split(","); 

    for(count =0;count<arr.length;count++) 
    { 
     $("input[type=checkbox][value=arr[count]]").prop("checked",true);​ 
    } 
    </script> 

В модели есть атрибут под названием «Удобства» типа string. В нем хранятся все удобства, такие как Wi-Fi, бассейн, парк и т. Д. С разделителем (,). Когда я перехожу на страницу редактирования, я хочу, чтобы все эти удобства проверялись, которые ранее были сохранены для этого конкретного объекта.Как пометить флажки при загрузке страницы с помощью javascript?

+0

Почему бы вам не проверить его на сервере при создании страницы? Я имею в виду, что у вас есть данные, и вы помещаете их в разделенную комой строку как значение скрытого поля, чтобы позже установить флажки с помощью javascript? В чем смысл? –

+0

Я попробовал вашу вещь. Я изменил его на текстовое поле, и он показывает все удобства. Но я хочу отметить те флажки, значения которых появляются в @ Model.Amenities. –

ответ

1

Я предлагаю сделать это на сервере, когда вы создаете представление. Все, что вам нужно:

public class MyModel 
{ 
... 
    public string[] Amenities { get; set; } 
... 
} 

Тогда в представлении:

@Html.Checkbox("WiFi", @Model.Amenities.Contains("WiFi")) 
@Html.Checkbox("Pool", @Model.Amenities.Contains("Pool")) 

Конечно, это всего лишь пример, и в реальной жизни, вы, вероятно, есть список возможных удобств и вы перебирать, чтобы сделать флажки для каждого из них. Также вместо строк в качестве значений я бы рекомендовал и перечислил.

+0

Я не использовал массив строк, но все же работал с типом «строка» без необходимости сценария для разделения. Есть ли какая-то конкретная причина для использования массива? –

+1

Ну, в общем, если вам нужно хранить несколько элементов чего-то, вы обычно храните их в массиве, списке, словаре, хэш-таблице и т. Д. Строки для текстовых данных. Когда вы храните свои элементы в строке, разделенной запятыми, вы будете иметь несколько последствий: 'String.Contains()' не совпадает с 'IEnumerable.Contains'. '' парковка '. Состояния («парк») == true'. Кроме того, поиск строки для подстроки - это совершенно другая операция от проверки, является ли данный элемент в списке/array/hashtable или нет. –

0
<script type="text/javascript"> 
    $(function() { 
     var arr = new Array(); 
     var str = $("#amenities").val(); 
     arr = str.split(","); 
     $('input[type=checkbox]').each(function(key,val){ 
      if(jQuery.inArray($(this).val(), arr){ 
       $(this).prop("checked",true); 
      } 
     }) 
    }); 
</script> 

Проверьте приведенный выше код. !!

1 рекомендация, поскольку вы используете jQuery, GO с синтаксисом jQuery.

+0

Bro Я попробовал вашу вещь, но это не сработало. Спасибо за предложение. –

1

Это работает:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     var arr = $("#amenities").val().split(","); 
     $('input[type=checkbox]').each(function(){ 
      if($.inArray($(this).val(), arr) >= 0){ 
      $(this).attr("checked",true); 
      } 
     }); 
    }); 
</script> 
+0

Да, это отлично работает. Поскольку я использую MVC, я предпочту использовать элемент @html. Хотя я сохранил ваш код в комментариях. Благодарю. –

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