2012-01-12 4 views
0

Я пытаюсь создать серию флажков, которые будут обновлять диапазон, чтобы отслеживать количество отмеченных флажков (показывает что-то вроде «4 из 12 проверенных»,). Я создал функцию updateSelected JavaScript, который обрабатывает, но это требует идентификатора диапазона и класса флажков для подсчета, так что я попробовал этот код, чтобы генерировать каждый флажок:Html.CheckBox событие onclick получает экранированный

@Html.CheckBox(string.Format("contentprofilestate[{0}].selected", i), 
    new { onclick = "updateSelected('" + selectedSpanId + "', '" + checkboxClass + "')" }) 

Это производит следующий HTML:

<input id="contentprofilestate_6__selected" name="contentprofilestate[6].selected" 
onclick="updateSelected(&#39;StMarySpan&#39;, &#39;StMaryCheck&#39;)" 
type="checkbox" value="true" /> 

Как я могу получить обработчик события onclick для визуализации без возможности избежать апостроф? Кроме того, есть ли лучший способ выполнить эту задачу (если да, не стесняйтесь использовать jQuery в своем предложении)?

Примечание Re: Lester

Я создал новый проект и создал эту точку зрения и она до сих пор избегали апострофа:

@{ 
    ViewBag.Title = "index"; 
} 

<h2>index</h2> 

@Html.CheckBox(string.Format("contentprofilestate[{0}].selected", 0), new { onclick = "updateSelected('" + "test" + "', '" + "test2" + "')" }) 

Альтернативное решение

Я не был в состоянии выяснить, как сохранить апострофы от экранирования, поэтому я написал некоторую логику jQuery, чтобы делать то, что мне нужно, без встроенного JavaScript:

jQuery(document).ready(function() { 
    jQuery(':checkbox').click(function() { 
     var clientHeader = jQuery(this).closest('.client-header'); 
     var clientCheckedSpan = clientHeader.find('.client-checked'); 
     var inputChecked = clientHeader.find('input:checked'); 
     clientCheckedSpan.text(inputChecked.length); 
    }); 
}); 
+0

ли функция фактически называется? – Pbirkoff

+0

Нет, но это потому, что встроенный JavaScript не выводится правильно. Я уверен, что updateSelected() работает правильно, если я могу заставить его правильно называться с помощью обработчика onclick. –

ответ

1

Очень странно, что апострофы кодируются. Я не думал, что они будут, и после непродолжительного теста они не будут. Вероятно, что-то происходит в этом плане. Если вы разместите только одну строку в пустом представлении, я уверен, что у вас не будет той же проблемы.

Что касается других вариантов, вы можете легко получить количество выбранных флажков с помощью JQuery:

var numChecked = $("input:checked[id^=contentprofilestate]").size(); 
+0

+1 для этого ответа. Легче просто сделать выбор, используя то, что уже существует (и, кроме того, вы избегаете встроенного JavaScript). – JasCav

+0

У меня есть несколько клиентов, у каждого из которых есть свой раздел, и я хочу отдельно подсчитывать каждую группу ящиков. Это было причиной прохождения класса (который кодирует клиент) и диапазона (который находится в заголовке клиента). Я проверяю пустой вид, чтобы узнать, могу ли я определить, где происходит кодирование, но есть ли у вас какие-либо мысли по правильному пути, чтобы убедиться, что подсчитан только правильный поднабор флажков? –

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