2010-08-25 5 views
4

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

function displayAction(){ 
    var f = document.adminForm; 
    var a = f.action; 

    if(f.prefix.value!="-") { 
     a = a + '&task=callExclusionDisplay&prefix=' + f.prefix.value; 
    } 
    else { 
     var exclusions = document.getElementById("exclusions"); 
     if (exclusions != null){ 
      alert("exclusions set"); 
      a = a + '&task=callExclusionCreate&prefix=' + f.prefix.value + '&exclusions=' + exclusions.join(); 
     } 
    } 
    alert('after if, action is ' + a); 
} 

код не проходит, если проверка, чтобы увидеть, если исключения не равно нулю, несмотря на то, когда я смотрю на странице есть несколько флажков названных исключений (с идентификатором заявление также установлены исключения). Является ли проблема с! = Null, потому что это группа флажков, а не один элемент формы? Как я могу заставить это работать? Если я пропущу тест на null, код выдает ошибки об исключении, которые не определяются, если база данных не возвращает никаких соответствующих значений.

ответ

2

Вы используете document.getElementById, но элементы формы имеют имя. Попробуйте f.elements.namedItem("exclusions") вместо exclusions != null

+0

Спасибо, что работал. – EmmyS

0

У всех флажков одинаковые id == исключения? Если да, тогда вы должны сначала исправить это.

Прежде чем вы это сделаете, попробовали ли вы проверить первый флажок и посмотреть, проходит ли условие if?

+0

Идентификатор должен быть всегда уникальным, если не выбран первый элемент в DOM, соответствующий идентификатору.поэтому я попросил вас выбрать первый флажок, чтобы проверить, проходит ли условие. Вы могли бы попробовать, что предложил @lekensteyn, но не уверены в этом. – Rahul

1

Несколько элементов на одной странице не могут использовать атрибут id (то есть id должен быть уникальным или не установлен). Кроме того, хотя некоторые (более старые) браузеры ошибочно собирают элементы, имя которых соответствует идентификатору, который ищет с getElementById, это недействительно и не будет работать в кросс-браузере.

Если вы хотите получить группу элементов, вы можете дать им все тот же атрибут name и использовать document.getElementsByName, чтобы получить группу. Обратите внимание, что результатом этого будет NodeList, который похож на массив, в котором он может быть повторен.

+0

Все они имеют одинаковое имя, и я попытался getElementsByName, и он не работает. Нет ошибок, он просто не оценивается как истинный, поэтому код внутри if никогда не запускается. – EmmyS

+0

@EmmyS, если вы 'alert (document.getElementsByName ('исключения'))', каков результат? –

+0

@EmmyS вам нужно удалить любые дублирующиеся идентификаторы с вашей страницы. Убедитесь, что все ваши элементы с указанным идентификатором не дублируются. Даже если это тот же самый элемент. – 7wp

0

Если у вас есть более одного элемента с идентификаторами «исключений», это испортит функциональность getElementById. Я бы удалил дубликаты «исключений» из всех ваших элементов и вместо этого использовал getElementByName(), а вместо этого предоставил вашей группе флажков имя = «исключения».

Редактировать: Но есть гораздо более простой способ использования jQuery, и он дает вам кросс-браузерную совместимость. Для того, чтобы сделать то же самое с jQuery сделать это:

var checkBoxesExist = $('[name=exclusions]').count() > 0; 

Или, если вы дали свои элементы, то вы можете сделать уникальный ID это:

var checkbox1exists = $('#checkBox1').count() > 0; 
+0

Пробовал это уже; не работает. – EmmyS

+0

@EmmyS Проверьте источник своей страницы в своем браузере. Есть ли идентификаторы для любых элементов, которые появляются более одного раза? – 7wp

0

Каждый элемент должен иметь уникальный идентификатор.

Затем вы можете проверить так же, как это:

if (document.getElementById('exclusions1')) { 
    //field exists 
} 

Или, если вам нужно перебрать кучу из них:

for (x=0; x<10; x++) { 
    if (document.getElementById('exclusions' + x)) { 
     //field X exists 
    } 
} 
Смежные вопросы