这里几乎没有Javascript / Jquery的菜鸟。我正在构建一个相对简单的电子邮件表单,我想用一些存储在MySQL数据库中的预定义模板之一填充,用PHP检索。
选择下拉菜单是根据数据库条目(描述)构建的,当用户更改它时,应将主题和正文加载到相应命名的字段中。
我已成功使用PHP构建javascript if页面加载语句以与选择菜单进行比较,并且它确实将主题加载到文本字段中。尝试加载textarea时,整个脚本都会失败。
<script>
$(document).ready(function(){
$('#Template').on('change',function(){
var Template = $(this).val();
<?php
$emailQuery = "SELECT RecID,Subject,Body FROM ST_Email ORDER BY Sort ASC";
$emailResults = mysqli_query($connect, $emailQuery);
while ($ERow = mysqli_fetch_array($emailResults))
{
$RecID = $ERow['RecID'];
$EmailContents = addslashes($ERow['Body']);
$Subject = $ERow['Subject'];
echo "if (Template == $RecID)
{
$(\"#Subject\").val(\"$Subject\");
$(\"#EmailContents\").val(\"$EmailContents\");
}
";
}
?>
});
});
</script>
稍后,在HTML / PHP ...
echo "<p>Please choose an email template from this pulldown menu:</p>
<p><select name=\"Template\" id=\"Template\"><option>-- Blank --</option>";
$emailTemplateQuery = "SELECT RecID,Description FROM ST_Email ORDER BY Sort ASC";
$emailTemplateResult = mysqli_query($connect, $emailTemplateQuery);
while ($ETRow = mysqli_fetch_array($emailTemplateResult))
{
$Description = stripslashes($ETRow['Description']);
$RecID = $ETRow['RecID'];
echo "<option value=\"$RecID\">$Description</option>";
}
echo "</select></p>";
?>
Subject line: <input type="text" name="Subject" size="94" id="Subject" />
<p>Contents of message:</p>
<p><textarea name="EmailContents" rows="26" cols="94" id="EmailContents"></textarea>
<input type="submit" name="Send Email" value="Send Email"/>
当然,$ EmailContents的内容将包括换行符,一些特殊的标点符号和大量文本。我最初尝试用AJAX和JSON做到这一点,但是无法做到这一点。
从我所读到的.val(foo)方法应该适用于textareas,但它对我不起作用。我希望用户选择一个电子邮件模板并对文本进行处理,然后提交表单。
非常感谢任何和所有的帮助。我从其他Stack Overflow问题和答案中学到了很多东西,但是这个让我难过。
答案 0 :(得分:0)
你的代码非常狡猾,但对我来说很好看。但我确实知道哪些线条会破坏它。
$(\"#Subject\").val(\"$Subject\");
$(\"#EmailContents\").val(\"$EmailContents\");
想象一下,您有一个包含以下内容的电子邮件模板:
您好&#34;
现在如果这个内容通过PHP插入到你的JavaScript中,它将会突破val()
函数,因为它结束了字符串参数:
$(\"#EmailContents\").val(\"Hello"");
要确认这是问题,请打开开发人员控制台并在&#34;来源&#34;选项卡打开您的JS文件,看看它是否是导致它的原因。