JQuery 由 MySQL table 填充的 HTML select 元素的内联编辑。 Contenteditable
JQuery in-line edit of HTML select element populated by MySQL table. Contenteditable
我有一些 JQuery 代码,允许在用户不提交的情况下即时在线编辑 MySQL table。它使用 JQuery 和 AJAX 调用来更新数据库。它适用于元素内的数据,但是当我想更新元素内的某些内容时,我似乎无法在选择该选项时调用 selected="selected" 。查看 AJXA 创建的 SQL 时,所有可用的选项都在提交的 SQL 语句中。
我做错了什么或者我需要走另一条路吗?这是我的代码的简化版本。我希望这足以理解我想要完成的事情。感谢您提供的任何帮助或指导。
我有一个网页 (members.php),它调用 MySQL table (members_v30) 来检索成员数据,并调用另一个来获取选项从 member_credentials table 到填充字段以显示和编辑(如果需要)成员的凭据。
<?php
//Create DB Object
$db = new Database;
//Query
$query = "SELECT * from members_v30 ORDER BY last_name ASC";
//Run Query
$members = $db->select($query);
?>
<?php
//Query
$query = "SELECT * from member_credentials ORDER BY credential ASC";
//Run Query
$credentials = $db->select($query);
?>
table 的人口和会员的凭据效果很好。我可以编辑元素中的任何内容。我还有一些代码可以根据与数据库 table 匹配的相等条件来选择正确的选项。 (注意:我可能正在将此问题中的代码制作为详细购买以显示凭据循环,因为我认为它与该问题没有任何关系。我认为它与 contenteditable 和 select.)
<?php while($row = $members->fetch_assoc()) : ?>
<tr class="table-row">
<!-- edit saveToDatabase(this,'xxxxxxxx') -->
<td contenteditable="true" onBlur="saveToDatabase(this,'last_name','<?php echo $row['id']; ?>')" onClick="showEdit(this);"><?php echo $row['last_name']; ?></td>
<td contenteditable="true" onBlur="saveToDatabase(this,'first_name','<?php echo $row['id']; ?>')" onClick="showEdit(this);"><?php echo $row['first_name']; ?></td>
<td contenteditable="true" onBlur="saveToDatabase(this,'initial','<?php echo $row["id"]; ?>')" onClick="showEdit(this);"><?php echo $row["initial"]; ?></td>
<td contenteditable="true" onBlur="saveToDatabase(this,'suffix','<?php echo $row["id"]; ?>')" onClick="showEdit(this);"><?php echo $row["suffix"]; ?></td>
<td>
<select name="code1" contenteditable="true" onChange="saveToDatabase(this,'code1','<?php echo $row["id"]; ?>')" onClick="showEdit(this);">
<?php mysqli_data_seek($credentials,0); ?>
<?php while($row2 = $credentials->fetch_assoc()) : ?>
<option value="<?php echo $row2['credential']; ?>" <?php if ($row2['credential'] == $row['code1']) echo 'selected="selected"'; ?> ><?php echo $row2['credential']; ?></option>
<?php endwhile; ?>
</select>
<?php //echo $row["code1"]; ?>
</td>
</tr>
<?php endwhile; ?>
我的问题是当我 select 另一个选项时我似乎没有得到 selected="selected" 属性然后我的 JQuery/AJAX 没有通过对数据库的正确查询。
再一次,这只发生在 .效果很好。
这是我的 JavaScript (edit.js)...
function showEdit(editableObj) {
$(editableObj).css("background","#FFF");
}
function saveToDatabase(editableObj,column,id) {
$(editableObj).css("background","#FFF url(loaderIcon.gif) no-repeat right");
$.ajax({
url: "saveedit.php",
type: "POST",
data:'column='+column+'&editval='+editableObj.innerHTML+'&id='+id,
success: function(data){
$(editableObj).css("background","#FDFDFD");
}
});
}
还有我的savedit.php
<?php include 'libraries/Database.php'; ?>
<?php
//Create DB Object
$db = new Database;
//Query
$query = "UPDATE members_v30 set " . $_POST["column"] . " = '".$_POST["editval"]."' WHERE id=".$_POST["id"];
//Run Query
//echo $query ; // Will be shown in Chrome Developer Tools
$update_members = $db->update_members($query);
?>
使用 Chrome 的开发。工具的网络 - 在这里预览是我得到的
更新members_v30 设置代码 1 = '
阿巴尔
ABHM
APRN
' 其中 id=1
所以你可以看到每个选项都被传递了。
任何意见、批评或??将不胜感激。提前谢谢你。
我成功了。我不确定这是否是最好的方法,但它确实有效。
我将 post 代码并解释我所做的事情....
带有 select 下拉菜单的主页。
<td>
<select id=code1_<?php echo $row['id']; ?> onchange="getcode1(this,'<?php echo $row['id']; ?>')">
<option value=""></option>
<?php mysqli_data_seek($credentials,0); ?>
<?php while($row2 = $credentials->fetch_assoc()) : ?>
<option value="<?php echo $row2['credential']; ?>" <?php if ($row2['credential'] == $row['code1']) echo 'selected="selected"'; ?> ><?php echo $row2['credential']; ?></option>
<?php endwhile; ?>
</select>
</td>
onchange,我正在传递代码 1 selected 和会员 ID。
我已经取消了 contenteditable,现在使用 select 元素的 id 来表示传递给 JavaScript getcode1 函数的值。
请注意,此页面列出了许多成员,这就是我将成员 ID 添加到 select id 的原因,因为我需要每个 select id 都不同。如果我不这样做,当我将 select id 传递给 JavaScript.
时,它会保留第一个值
我也在遍历凭证 table,如果选项值与会员代码匹配,我设置 selected="selected".
这是我的 Javascript
function getcode1(value,member_id) {
var value = $('#code1_'+member_id).val();
$.ajax({
type: "POST",
url: "save_code1.php",
data:'member_code1='+value+'&member_id='+member_id,
success: function(data){
$('form#submit').hide(function(){$('div.success').fadeIn();});
}
});
return true;
};
这是 save_code1.php
<?php include 'libraries/Database.php'; ?>
<?php
//Create DB Object
$db = new Database;
?>
<?php
$id = $_POST['member_id'];
$code1 = $_POST['member_code1'];
$query = "UPDATE members_v30 SET code1 = '$code1' where id =".$id;
$update_members = $db->update_members($query);
?>
正如我之前提到的,它有效,但它可能不是最好的方法。我可能会重新审视它,但现在我正在处理下一个问题。
我有一些 JQuery 代码,允许在用户不提交的情况下即时在线编辑 MySQL table。它使用 JQuery 和 AJAX 调用来更新数据库。它适用于元素内的数据,但是当我想更新元素内的某些内容时,我似乎无法在选择该选项时调用 selected="selected" 。查看 AJXA 创建的 SQL 时,所有可用的选项都在提交的 SQL 语句中。
我做错了什么或者我需要走另一条路吗?这是我的代码的简化版本。我希望这足以理解我想要完成的事情。感谢您提供的任何帮助或指导。
我有一个网页 (members.php),它调用 MySQL table (members_v30) 来检索成员数据,并调用另一个来获取选项从 member_credentials table 到填充字段以显示和编辑(如果需要)成员的凭据。
<?php
//Create DB Object
$db = new Database;
//Query
$query = "SELECT * from members_v30 ORDER BY last_name ASC";
//Run Query
$members = $db->select($query);
?>
<?php
//Query
$query = "SELECT * from member_credentials ORDER BY credential ASC";
//Run Query
$credentials = $db->select($query);
?>
table 的人口和会员的凭据效果很好。我可以编辑元素中的任何内容。我还有一些代码可以根据与数据库 table 匹配的相等条件来选择正确的选项。 (注意:我可能正在将此问题中的代码制作为详细购买以显示凭据循环,因为我认为它与该问题没有任何关系。我认为它与 contenteditable 和 select.)
<?php while($row = $members->fetch_assoc()) : ?>
<tr class="table-row">
<!-- edit saveToDatabase(this,'xxxxxxxx') -->
<td contenteditable="true" onBlur="saveToDatabase(this,'last_name','<?php echo $row['id']; ?>')" onClick="showEdit(this);"><?php echo $row['last_name']; ?></td>
<td contenteditable="true" onBlur="saveToDatabase(this,'first_name','<?php echo $row['id']; ?>')" onClick="showEdit(this);"><?php echo $row['first_name']; ?></td>
<td contenteditable="true" onBlur="saveToDatabase(this,'initial','<?php echo $row["id"]; ?>')" onClick="showEdit(this);"><?php echo $row["initial"]; ?></td>
<td contenteditable="true" onBlur="saveToDatabase(this,'suffix','<?php echo $row["id"]; ?>')" onClick="showEdit(this);"><?php echo $row["suffix"]; ?></td>
<td>
<select name="code1" contenteditable="true" onChange="saveToDatabase(this,'code1','<?php echo $row["id"]; ?>')" onClick="showEdit(this);">
<?php mysqli_data_seek($credentials,0); ?>
<?php while($row2 = $credentials->fetch_assoc()) : ?>
<option value="<?php echo $row2['credential']; ?>" <?php if ($row2['credential'] == $row['code1']) echo 'selected="selected"'; ?> ><?php echo $row2['credential']; ?></option>
<?php endwhile; ?>
</select>
<?php //echo $row["code1"]; ?>
</td>
</tr>
<?php endwhile; ?>
我的问题是当我 select 另一个选项时我似乎没有得到 selected="selected" 属性然后我的 JQuery/AJAX 没有通过对数据库的正确查询。
再一次,这只发生在 .效果很好。
这是我的 JavaScript (edit.js)...
function showEdit(editableObj) {
$(editableObj).css("background","#FFF");
}
function saveToDatabase(editableObj,column,id) {
$(editableObj).css("background","#FFF url(loaderIcon.gif) no-repeat right");
$.ajax({
url: "saveedit.php",
type: "POST",
data:'column='+column+'&editval='+editableObj.innerHTML+'&id='+id,
success: function(data){
$(editableObj).css("background","#FDFDFD");
}
});
}
还有我的savedit.php
<?php include 'libraries/Database.php'; ?>
<?php
//Create DB Object
$db = new Database;
//Query
$query = "UPDATE members_v30 set " . $_POST["column"] . " = '".$_POST["editval"]."' WHERE id=".$_POST["id"];
//Run Query
//echo $query ; // Will be shown in Chrome Developer Tools
$update_members = $db->update_members($query);
?>
使用 Chrome 的开发。工具的网络 - 在这里预览是我得到的
更新members_v30 设置代码 1 = ' 阿巴尔 ABHM APRN ' 其中 id=1
所以你可以看到每个选项都被传递了。
任何意见、批评或??将不胜感激。提前谢谢你。
我成功了。我不确定这是否是最好的方法,但它确实有效。
我将 post 代码并解释我所做的事情....
带有 select 下拉菜单的主页。
<td>
<select id=code1_<?php echo $row['id']; ?> onchange="getcode1(this,'<?php echo $row['id']; ?>')">
<option value=""></option>
<?php mysqli_data_seek($credentials,0); ?>
<?php while($row2 = $credentials->fetch_assoc()) : ?>
<option value="<?php echo $row2['credential']; ?>" <?php if ($row2['credential'] == $row['code1']) echo 'selected="selected"'; ?> ><?php echo $row2['credential']; ?></option>
<?php endwhile; ?>
</select>
</td>
onchange,我正在传递代码 1 selected 和会员 ID。
我已经取消了 contenteditable,现在使用 select 元素的 id 来表示传递给 JavaScript getcode1 函数的值。
请注意,此页面列出了许多成员,这就是我将成员 ID 添加到 select id 的原因,因为我需要每个 select id 都不同。如果我不这样做,当我将 select id 传递给 JavaScript.
时,它会保留第一个值我也在遍历凭证 table,如果选项值与会员代码匹配,我设置 selected="selected".
这是我的 Javascript
function getcode1(value,member_id) {
var value = $('#code1_'+member_id).val();
$.ajax({
type: "POST",
url: "save_code1.php",
data:'member_code1='+value+'&member_id='+member_id,
success: function(data){
$('form#submit').hide(function(){$('div.success').fadeIn();});
}
});
return true;
};
这是 save_code1.php
<?php include 'libraries/Database.php'; ?>
<?php
//Create DB Object
$db = new Database;
?>
<?php
$id = $_POST['member_id'];
$code1 = $_POST['member_code1'];
$query = "UPDATE members_v30 SET code1 = '$code1' where id =".$id;
$update_members = $db->update_members($query);
?>
正如我之前提到的,它有效,但它可能不是最好的方法。我可能会重新审视它,但现在我正在处理下一个问题。