Javascript 如何在onclick事件上重新加载jquery?

Javascript 如何在onclick事件上重新加载jquery?,javascript,php,jquery,Javascript,Php,Jquery,我有一个表行,它从MySQL检索数据,我还包括一个.onclick函数,它打开一个包含数据的文本编辑器,但是文本编辑器只打开第一行,而不打开表中的其余行 这是jQuery代码:第一个打开文本编辑器,第二个为文本编辑器(ckeditor)切换文本区域 <script type="text/javascript"> $(document).ready(function() { $(".trClass").click(function()

我有一个表行,它从MySQL检索数据,我还包括一个.onclick函数,它打开一个包含数据的文本编辑器,但是文本编辑器只打开第一行,而不打开表中的其余行

这是jQuery代码:第一个打开文本编辑器,第二个为文本编辑器(ckeditor)切换文本区域

<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);
    });
});