2013-03-27 2 views
0

Я хочу проверить свою форму, но ТОЛЬКО, если в это время отображается окружающий его div. Это то, что я до сих пор:Только подтверждение текстового поля при отображении = блок

function validateForm() 
{ 
var x=document.forms["config"]["itemname5"].value; 
if (document.getElementById("customtext").style.display=="block" || x==null) 
    { 
    alert("Text box must be filled in"); 
    return false; 
    } 
} 

HTML фрагмент:

<div class="hide" id="customtext">Enter the text you require on the module. eg. "DAVE" max 6 letters<br /> 
<input type=text name="itemname5" class="nicebox" value='' maxlength="6" style="font-size:14; font-weight:bold; width:210px; vertical-align:top; height:20px;"> 
</div> 

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

Вот страница: http://www.censdigital.com/2012/earplugs-config.html

Заранее спасибо!

+1

Итак, мы знаем, что такое ожидаемое поведение. Какое поведение вы используете в своем текущем коде? –

+0

Я хочу, чтобы, если div отображается, он сообщит пользователю, если они не ввели какой-либо текст и не опубликуют форму. – Alan

+1

Если вы специально не устанавливаете элементы как 'display =" block ", я бы изменил ваш оператор' if' на 'element.style.display! =" None "', тогда он также обработает видимый элемент, но свойство отображения не будет установлен или пустой. –

ответ

0

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

Вы можете просто проверить, если элемент виден через

$(x).is(":visible") /*returns true or false*/ 

редактировать:

Чтобы использовать JQuery, добавьте в головной части вашей страницы, вы также можете скачать этот JS файл и хост это локально.

После этого добавляется, вы можете проверить, если ваш элемент х видно на

if($(x).is(":visible")) 
{ 
    //your element is visible 
} 

Я рекомендую прочитать больше на JQuery, который является очень мощной библиотекой. И поможет вам много. www.jquery.com

+0

Очень верная точка зрения о том, что родители скрыты, но где OP говорит, что они используют jQuery? – Ian

+0

Спасибо, но я очень новичок в jQuery и Java, где бы я поместил ваш код для его работы для меня? – Alan

+0

@Alan отредактировал ответ –

0

Ваш оператор if учитывает только тогда, когда для элементов display установлено значение "block", есть много других состояний, в которых элемент виден. Я хотел бы проверить ли она не скрыта, как этот

if (document.getElementById("customtext").style.display != "none" && x==""){ 
    alert("Text box must be filled in"); 
    return false; 
} 

Теперь, если свойство display не установлен или не установлен "block" вы все равно получите ожидаемые результаты.

Ваша проблема с формой, по-прежнему представляющей, вероятно, связана с тем, как вы выполняете свою функцию. Можете ли вы показать мне, откуда вызывается функция. Похоже, что ваш оператор return false просто выходит из вашей функции, а не препятствует отправке формы.

+0

Я не хочу добавлять ответ, потому что именно вы нашли основную проблему, но я думаю, что условие, которое вы хотите, - 'if (document.getElementById (« customtext »). Style.display ! == "none" && x === "") {'. Что говорит «если родительский вид виден И значение текстового поля пуст, а затем отображает ошибку». Обратите внимание, что '||' становится '&&', а 'null' становится' '' '. Вот скрипка: http://jsfiddle.net/BRdGP/. Вы можете использовать все это в своем ответе. ** ИЗМЕНИТЬ: ** Подождите, я соврал ... это не работает. Хаха держится на – Ian

+0

@ Если вы правы в логике, '||' не работает. Я обновил свой ответ –

+0

Правильно, логика имеет смысл, но проблема заключается в '.style.display'. Если вы посмотрите на мою скрипку и посмотрите, как элемент имеет класс 'hide'. Этот класс является тем, который указывает «display: none;» (что я и предполагаю, что код OP похож). Но результат '.style.display' для элемента всегда' '' '. Это не то, что я ожидал, но, я думаю, это имеет смысл. Таким образом, первая часть оператора 'if' всегда будет верна при использовании классов для скрытия элемента. Очевидно, что если '.style.display' явно задан, значение будет отражено ... но OP использует класс – Ian

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