В моей программе я либо отображаю, либо не отображаю определенные элементы на основе выбора пользователем набора переключателей. Я использую атрибут «onclick» для вызова функции Javascript «hideshow (e, x)», которая принимает в качестве первого аргумента имя класса элементов, которые будут отображаться / не отображаться, а в качестве второго аргумента — «none» или ‘в соответствии’. Кажется, это работает нормально.
Но иногда я уже знаю, какие элементы должны отображаться, поэтому я не отображаю переключатели и просто хочу вызвать hideshow (e, x) напрямую. Поместив оператор ALERT в функцию, я знаю, что функция на самом деле вызывается и получает правильные параметры. Тем не менее, видимость элементов не меняется.
Может кто-нибудь объяснить это, и скажите мне, как это исправить?
Вот код Я использую переменную $ isperson, чтобы определить, является ли радио:
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Visibility Test</title>
<script>
function hideshow(element,x){
alert ("in hideshow, element:"+element+", x:"+x);
$(element).css("display",x);
var telement = element+"-";
var tx="";
if(x=="none"){tx="inline";}else{tx="none";}
$(telement).css("display",tx);
}
</script>
</head>
<body>
<?
$isperson=1;
if($isperson){
echo " ready to use hideshow <br>";
ob_start();
echo "<script>setTimeout(hideshow('.personInput','inline'),1)</script>";
ob_end_flush();
}else{
echo "<input type='radio' name='bizorper' value='business' onclick=\"" . "hideshow('.personInput','none')" . "\" id='business' checked> Business/organization";
echo "<input type='radio' name='bizorper' value='person' onclick=\"" . "hideshow('.personInput','inline')" . "\" id='person'> person <p>";
}
?>
<p class="personInput" style="display: none"> Normally doesn't display if radio button is 'business', but should if radio button is 'person' or $isperson=1<p></p>
<p class="personInput-" style="display: inline">Normally Displays, unless radio button is 'person' or $isperson=1</p>
<p class="personInput" style="display: none">Normally doesn't display 2;</p>
</body>
</html>
Поместите код PHP, который выводит JavaScript ниже элементы, которые должны быть отображены / скрыты.
Ваша функция выполняется до визуализации элементов. Вы включили тайм-аут, но он установлен только на 1 миллисекунду. Перемещение сценария должно позволить вам полностью избавиться от таймаута.
Других решений пока нет …