Javascript 如何在onclick事件上重新加载jquery?
我有一个表行,它从MySQL检索数据,我还包括一个.onclick函数,它打开一个包含数据的文本编辑器,但是文本编辑器只打开第一行,而不打开表中的其余行 这是jQuery代码:第一个打开文本编辑器,第二个为文本编辑器(ckeditor)切换文本区域Javascript 如何在onclick事件上重新加载jquery?,javascript,php,jquery,Javascript,Php,Jquery,我有一个表行,它从MySQL检索数据,我还包括一个.onclick函数,它打开一个包含数据的文本编辑器,但是文本编辑器只打开第一行,而不打开表中的其余行 这是jQuery代码:第一个打开文本编辑器,第二个为文本编辑器(ckeditor)切换文本区域 <script type="text/javascript"> $(document).ready(function() { $(".trClass").click(function()
<script type="text/javascript">
$(document).ready(function()
{
$(".trClass").click(function()
{
var id = $(this).attr('id');
$('#d_'+id).css("display", "block");
$('#table_id').css("display", "none");
});
});
window.onload = function()
{
CKEDITOR.replace("editor1");
};
</script>
$(文档).ready(函数()
{
$(“.trClass”)。单击(函数()
{
var id=$(this.attr('id');
$('#d'+id).css(“显示”、“块”);
$('#table_id').css(“显示”、“无”);
});
});
window.onload=函数()
{
CKEDITOR.replace(“editor1”);
};
这是桌子的回声,我用的是foreach
echo '
<tr class="trClass" id="'.$counter.'">
<td class="marker">
<i class="fa fa-align-left"></i>
</td>
<td class="title">
'.$article_title.'
</td>
<td class="content">
'.$article_content.'
</td>
</tr>
<section id="d_'.$counter.'" style="display:none;">
<textarea id="editor1">
<div style="width:468px;">
'.$article_content_full.'
</div>
</textarea>
</section>
';
$counter++;
}
echo'
“.$article_title”
“.$article_content”
“.$article\u content\u full”
';
$counter++;
}
我不知道如何制作
CKEDITOR.replace(“editor1”)代码>加载每个表,我尝试使用。单击其中的函数,但它不工作,因为它不加载。问题是,如果单击第一行,它会打开文本编辑器;如果单击第二行,它不会打开 尝试使用.on()
方法以表为目标并按行进行筛选
$(document).ready(function()
{
$('#table_id').on('click','.trClass',function() {
var id = $(this).attr('id');
$('#d_'+id).css('display', 'block');
$('#table_id').css('display', 'none');
});
});
有关.on()
的详细信息如下:
正如上面的评论所指出的,HTML中存在一些总体问题,您可能需要在继续之前解决。通常,id
属性对于每个元素都应该是唯一的。跨多个元素应用属性通常通过类
完成。知道这一点,CKEditor可能只是获取具有给定id
的对象的第一个实例(可能在幕后使用document.GetElementById
)
(根据,CKEDITOR.replace(var)
将采用DOM元素、ID或名称。)
有鉴于此,你有两个选择。一种是延迟加载CKEditor,直到您实际单击表行。这看起来像这样。。。(注意每个textarea
都有一个唯一的id)
第二个选项是循环所有textarea
元素,并在加载时对每个元素调用replace。我真的不推荐这个,除非有特定的原因你想提前加载所有东西
编辑:虽然这会解决您的问题,但您应该关注其他回答者提出的HTML问题<代码>
不属于
:-)的子级。好吧,首先,这是无效的HTML。表中没有节元素作为子元素。不能有多个id相同的id
,您的代码当前为每行输出一个
。@epascarello,我将您下面所说的内容的确切答案发布到WideAsleepDad的答案中。猜猜看,您需要找到更好的方法来输出数据。您是否听说过构建字符串并一次性输出数据?而且@DaveRandom用上面的评论击中了要害。@epascarello,我没有;你能给我指出正确的方向吗?问题不在于点击事件触发,而是CKEditor只在第一个实例上加载。在本例中,事件按预期工作,但不包括看到编辑器出现。在这种情况下,请从更正HTML开始,然后重试。有几个关于基本HTML的教程。我不能把这个部分放在其他地方,因为我需要在foreach中使用php变量,也就是说,我隐藏了,一旦单击了行,表就隐藏了自己,部分出现了,如果没有上面的方法,我没有其他方法来完成它。我不能将整个表放在foreach中,否则它将在只需要tr的情况下创建一个又一个表。您的答案实际上是正确的,这与我尝试的完全相同,但在这种情况下,由于某种原因它不起作用。Ckeditor甚至不再加载了,我在上面发布的链接中保留了它。抱歉,请将替换行更改为Ckeditor.replace('editor_'+id)代码>。你不需要这里的#,它不是JQuery。我的错误。:)
<section id="d_' . $counter . '" style="display:none;">
<textarea id="editor_'.$counter.'">
<div style="width:468px;">
'.$article_content_full.'
</div>
</textarea>
$(document).ready(function()
{
$(".trClass").click(function()
{
var id = $(this).attr('id');
$('#d_'+id).css("display", "block");
$('#table_id').css("display", "none");
CKEDITOR.replace('editor_'+id);
});
});