我想使用提交类型按钮更改会话值和<p>
文本。然而,会议确实发生了变化,但文本没有变化
以下是正文中的PHP代码
<?php
if (isset($_POST['lang']) == true && !empty($_POST['lang'])) {
$_SESSION["language"]=$_POST['lang'];
}
?>
<p>My Name is Khan</p>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post">
<button type="submit" name="lang" value="jpn" id="jpn">日本語</button>
<button type="submit" name="lang" value="eng" id="eng">English</button>
</form>
以下是Java脚本代码
$(document).ready(function(){
$("#jpn").on('click', function(){
$("p").text("私の名前はハーンです");
});
$("#eng").on('click', function(){
$("p").text("My name is Khan");
});
});
当我点击日语按钮时,文本发生了短暂的变化,但又变回了原来的内容
我该怎么解决这个问题?非常感谢。
问题是您还提交了表单,如果您不想重新加载页面,它会重新加载页面-添加preventDefault()
-它不会提交表单。
$(document).ready(function(){
$("#jpn").on('click', function(e){
e.preventDefault();
$("p").text("私の名前はハーンです");
});
$("#eng").on('click', function(e){
e.preventDefault();
$("p").text("My name is Khan");
});
});
但如果您需要重新加载页面来设置会话,则需要使用php:更改段落中的文本
<?php
if (isset($_POST['lang']) == true && !empty($_POST['lang'])) {
$_SESSION["language"]=$_POST['lang'];
if($_POST['lang'] == 'jpn'){
echo '<p>私の名前はハーンです</p>';
}else{
echo '<p>My Name is Khan</p>';
}
}
?>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post">
<button type="submit" name="lang" value="jpn" id="jpn">日本語</button>
<button type="submit" name="lang" value="eng" id="eng">English</button>
</form>
1.(php的isset
返回布尔值,无需检查== true
。
if( isset($_POST['lang']) && !empty($_POST['lang']) )
$_SESSION["language"] = $_POST['lang'];
2.(如果您想将表格张贴到同一文档,您也可以将表格的action
留空。
<form action="" method="post">
</form>
3.(应该通过php将初始状态写入文档,以防止用户点击重载时出现错误显示。否则,用户将提交表单,变量将被设置,但在其他方式重新加载后,将显示文本My name is Khan
。
你可以这样做,例如在一行中:
echo "<p>" . ($_SESSION["lang"] == "jpn" ? "私の名前はハーンです" : "My name is Khan") . "</p>";
或作为完整的if
:
if( $_SESSION["lang"] == "jpn" )
echo "<p>私の名前はハーンです</p>";
else
echo "<p>My name is Khan</p>";
$(document).ready(function(){
$("#jpn").on('click', function(){
$("p").text("私の名前はハーンです");
});
$("#eng").on('click', function(){
$("p").text("My name is Khan");
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>My Name is Khan</p>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post">
<button type="submit" name="lang" value="jpn" id="jpn">日本語</button>
<button type="submit" name="lang" value="eng" id="eng">English</button>
</form>
<p><?php echo (isset($_SESSION["language"]) && $_SESSION["language"] == 'jpn') ? '私の名前はハーンです':'My name is Khan';?></p>
只需将此条件放入
标签
这是因为表单操作正在进行刷新。您需要通过js事件防止
$(document).ready(function(){
$("form").on('click','#jpn', function(e){
e.preventDefault();
$("p").text("私の名前はハーンです");
});
$("form").on('click','#eng', function(e){
e.preventDefault();
$("p").text("My name is Khan");
});
});