У меня есть функция, чтобы добавить новый выбор, используя кнопку в таблице с ID = «maTable»
<button type="button" onclick ="addNew()"> Add More Agent</button>
Используя JS:
function Addnew(){
var table=document.getElementById("maTable");
var row=table.insertRow([table.rows.length]-1);
var len=(table.rows.length);
var newid="agentID"+len;
var newida="agentGroup"+len;
var cell1=row.insertCell;
var cell2=row.insertCell;
var cell3=row.insertCell;
var new_optionAgent =
"<select class=\"opsi\"id="'+newida+'">"+"<option selected=\"selected\"disabled=\"disabled\">Agent<\/option>"+"<option value=\"agentA\">Agent A<\/option>"+"<option value=\"agentB\">Agent B<\/option>"+"<option value=\"agentC\">Agent C<\/option>"+"<option value=\"agentD\">Agent D<\/option>"+"<\/select>"
cell1.innerHTML="Choose Agent" +" "+len;
cell2.innerHTML=":";
cell3.innerHTML= new_optionAgent;
}
С этим я могу получить кнопку, которая сгенерирует новый выбор с 4 вариантами (это работает). Но теперь возникает проблема, когда я хочу изменить опцию со списком из базы данных. Я использую базу данных php и postgres. Я создал код для того, который еще не сгенерирован кнопкой «AddNew»:
<?php
$que=pg_query("SELECT agentname FROM Agent");
echo "<select name=\"agentname1\"class=\"opsi\" id=\"agentGroup1\" required>";
echo "<option value=\"\" selected=\"selected\"disabled='disabled'>Agent</option>";
While($row=pg_fetch_array($que))
{
echo '<option value="'.$row['agentname'].'"> '.$row['agentname'].'</option>';
}
echo "</select>";
?>
Теперь я хочу сделать кнопку «AddNew», которая генерирует выбор со списком опций из базы данных. Я объединил код php с переменной «new_optionAgent», добавив «\» к некоторым символам. но это не работает.
Я комбинирую вот так
var new_optionAgent =
'<\?php
\$que=pg_query(\"SELECT agentname FROM Agent\")\;
echo \'<select name=\\\"agentname1\\\"class=\\\"opsi\\\" id=\\\"agentGroup1\\\" required>\'\;
echo \'<option value=\\\"\\\" selected=\\\"selected\\\"disabled=\\\'disabled\\\'>Agent</option>\'\;
While(\$row=pg_fetch_array(\$que))
{
echo \'<option value=\"\'\.$row[\'agentname\']\.\'\"> \'\.$row[\'agentname\']\.\'</option>\'\;
}
echo \"<\/select>\"\;
\?>'
эта комбинация кажется очень неправильной, любая помощь? Спасибо
Это не работает, потому что экранированный обратный слеш используется PHP для экранирования двойных кавычек. Поэтому вам нужно будет добавить еще один набор обратных слэзов и экранировать их, или использовать строку одинарной кавычки в PHP:
<?php
$que=pg_query("SELECT agentname FROM Agent");
echo '<select name=\"agentname1\"class=\"opsi\" id=\"agentGroup1\" required>';
echo '<option value=\"\" selected=\"selected\"disabled=\'disabled\'>Agent</option>';
While($row=pg_fetch_array($que))
{
echo '<option value="'.$row['agentname'].'"> '.$row['agentname'].'</option>';
}
echo "</select>";
?>
Вы не можете встроить PHP внутри такой переменной Javascript. Попробуй это:
<?php
$que=pg_query("SELECT agentname FROM Agent");
$whateverYouWannaCallThisString = '';
$whateverYouWannaCallThisString .= '<select name=\"agentname1\"class=\"opsi\" id=\"agentGroup1\" required>';
$whateverYouWannaCallThisString .= '<option value=\"\" selected=\"selected\"disabled=\'disabled\'>Agent</option>';
While($row=pg_fetch_array($que))
{
$whateverYouWannaCallThisString .= '<option value="'.$row['agentname'].'"> '.$row['agentname'].'</option>';
}
$whateverYouWannaCallThisString .= "</select>";
?>
<script type="text/javascript">
var new_optionAgent = "<?php echo $whateverYouWannaCallThisString; ?>";
</script>
Причина, по которой вы экранируете символы, заключается в том, что вы используете символы, которые окружают саму строку. Например: если вы определяете строку с двойными кавычками "
как это: var myString = "Yolo"
и вы хотите иметь двойные кавычки "
в этой строке вот так: var myString = "Dude, wheres "my" car"
тогда вам нужно избежать двойных кавычек "
вот внутри этой строки вот так: var myString = "Dude, wheres \"my\" car"
,
То же относится и к PHP
//Редактировать :
Я отредактировал переменную:
var new_optionAgent =
<?php echo json_encode($whateverYouWannaCallThisString); ?>;
и это работает 🙂
Других решений пока нет …