我看到很多像这样的问题,但是,我甚至无法进入.ajax()函数。我在此处解决了上一个问题:Accessing clicked cell instead of all cells using JQuery and Ajax
但是我的后续行动从未得到过回应。我将把它留在那里(除非另有说明),而不是再次发布代码。无论如何可以帮助我弄清楚1:获取var field
和var text
以反映我的更改。和2:如何访问id
的{{1}},因为它是变量。如何在.parent()中设置它?感谢。
编辑:
这是我的剧本:
tr
这是我的php显示表:
<script type="text/javascript">
$(document).ready(function()
{
$(".edit_td").click(function()
{
$(this).children(".text").hide();
$(this).children(".editbox").show();
}).change(function()
{
alert("working");
var id=$(this).parent();
var field=$("#input_"+ id).val();
var text=$(this).children(".editbox").val();
var dataString = 'id='+ id +'&field='+ field +'&text='+ text;
//$("#first_"+ID).html('<img src="load.gif" />'); // Loading image
if(input != text)
{
$.ajax({
type: "POST",
url: "table_edit_ajax.php",
data: dataString,
cache: false,
success: function(html)
{
$("#first_"+ID).html(first);
$("#last_"+ID).html(last);
}
});
}
else
{
alert('Enter something.');
}
});
// Edit input box click action
$(".editbox").mouseup(function()
{
return false
});
// Outside click action
$(document).mouseup(function()
{
$(".editbox").hide();
$(".text").show();
});
});
</script>
}
我甚至不确定我是否已进入我的public function displayTable($table)
{
//connect to DB
$con = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
echo "<table id='table' border='1'>"; //start an HTML table
$dbtable = $table;
$fields =array();
$result = mysqli_query($con, "SHOW COLUMNS FROM ".$dbtable);
//fill fields array with fields from table in database
while ($x = mysqli_fetch_assoc($result))
{
$fields[] = $x['Field'];
}
$fieldsnum = count($fields); //number of fields in array
//create table header from dbtable fields
foreach ($fields as $f)
{
echo "<th>".$f."</th>";
}
//create table rows from dbtable rows
$result = mysqli_query($con, "SELECT * FROM ".$dbtable);
while ($row = mysqli_fetch_array($result))
{
$rowid = $row[$fields[0]];
echo "<tr class='edit_tr' id='".$rowid."'>";
foreach ($fields as $f)
{
echo "<td class='edit_td'><span id='span_".$rowid."' class='text'>".$row[$f]."</span>
<input type='text' value='".$row[$f]."' class='editbox' id='input_".$rowid."'/> </td>";
}
$rowid++;
echo "</tr>";
}
echo "</table>"; //close the HTML table
//close connection
mysqli_close($con);
函数,但是一旦我这样做,我想将.change()
设置为与我的数据库ID对应的行ID(这将允许我用我的主键运行我的更新查询。我想做的下一件事就是将var id
设置为所选var field
的列标题,这样我就知道要从我的数据库中选择哪个字段。接下来我想要的是td
来反映文本框中已更改的文本以发送到更新查询。
现在,我希望能够将其作为var text
发送到table_edit_ajax.php并运行我的更新查询。我真的很困惑如何做到这一切。显然,我对ajax和javascript很新。
编辑:file:table_edit_ajax.php
POST
答案 0 :(得分:2)
首先,您将要将更改事件绑定到输入框,而不是其父td,因为我假设您希望仅在输入值更改时才运行您的更改。您还需要将td绑定从click更改为mouseup并添加stopPropagation调用以避免在文档上触发mouseup事件。
$(".edit_td").mouseup(function(e)
{
$(this).children(".text").hide();
$(this).children(".editbox").show();
e.stopPropagation();
}).children('.editbox').change(function() {
获取tr:
的idvar id = $(this).closest('tr').attr('id');
获取文字:
var text = $(this).val();
获得该字段的最佳方法可能是为您的输入框分配一个表示列标题的数据属性。在你的PHP中,因为你正在生成你的tds:
foreach ($fields as $f)
{
echo "<td class='edit_td'><span id='span_".$rowid."' class='text'>".$row[$f]."</span>
<input type='text' value='".$row[$f]."' class='editbox' id='input_".$rowid."' data-field='".$f."'/> </td>";
}
然后在你的Javascript中:
var field = $(this).data('field');
此外,您的查询字符串可能无法正确编码。最好将数据作为对象提供:例如。 {id:id, field:field, text:text}
,让jQuery为你处理url编码。
只是一个抬头,我注意到你将你的跨度的id设置为$rowid
。在执行此操作时,您的跨度ID将不是唯一的,并且可能会出现问题。如果您需要为他们提供身份证明,请尝试id='span_".$rowid."."-".$f."'
。