Javascript 文本区域的内联编辑–;如何取得身份证?

Javascript 文本区域的内联编辑–;如何取得身份证?,javascript,jquery,Javascript,Jquery,我在网页上使用内联编辑。一切都正常,除了我不知道如何获取将更改保存到数据库(通过Django)所需的项目的id HTML如下所示: <div id="remark14756" class="remark" data-cid="14756"> Sample Text </div> 示例文本 这就是JavaScript: <script src="/static/inline-edit.jquery.js"></script> <s

我在网页上使用内联编辑。一切都正常,除了我不知道如何获取将更改保存到数据库(通过Django)所需的项目的
id

HTML如下所示:

<div id="remark14756" class="remark" data-cid="14756">
    Sample Text
</div>

示例文本
这就是JavaScript:

<script src="/static/inline-edit.jquery.js"></script>
<script>

    $(".remark").inlineEdit({
        type: 'textarea',

        onChange: function (e, text, html) {
            // Executes when exiting inline edit mode and a change has been made
            c_id = $(this).attr("data-cid");
            alert("Test: ", c_id)
        }
    });
</script>

$(“.remark”).inlineEdit({
键入:“textarea”,
onChange:函数(e、文本、html){
//退出内联编辑模式并进行更改时执行
c_id=$(this).attr(“数据cid”);
警报(“测试:,c_id)
}
});
显然,
$(this)
在这种上下文中不起作用。我尝试了所有的方法,搜索了很多,但是我找不到正确的方法。有人知道答案吗?

他们说:

onChange(this,text,html)
-退出内联编辑模式并进行更改时执行

使用
这个
很容易引起误解

因此,第一个参数实际上是元素

$(".remark").inlineEdit({
    type: 'textarea',

    onChange: function (elem, text, html) {

       // `this` refers to inlineEdit instance plugin
       // `elem` is the currently edited element

       const c_id = $(elem).attr("data-cid");
       alert(c_id);  // 14756
    }
});
该插件未按预期的“jQuery插件”方式运行。
通常正确编写的插件应该:

  • 将所有方法绑定到被调用元素
  • (对于事件方法)第一个参数应始终引用原始事件
允许开发人员使用
this
关键字引用它来获取本机JS元素,或者在公开的公共方法中执行
$(this)
,就像我们期望从本机jQuery方法中获得的一样,并且可以访问事件(即:在我们使用箭头函数提取
currentTarget
的情况下非常有用,因为
这个
关键字不存在)


显然没有在该插件中实现。

我根据您的建议更改了代码,现在我得到了ID。太好了,非常感谢!您的解释也很有帮助。@RalfZosel非常欢迎您。PS:感谢您的帮助jqInlineEdit可以工作,但不幸的是,只要我使用ID作为选择器,如
$(“#remark1”).inlineEdit…
。使用类似于
$(“.remark”)的类.inlineEdit…
和多个文本,它会变得混乱,总是打开最后一个条目。我想这是您上面描述的问题的结果。我发现另一个脚本在任何情况下都可以正常工作,但我有一个非常类似的问题。我想,我将在单独的帖子中描述。这是新帖子:
$someElem.on('click', function(evt) {
  const $el = $(this); // what we're used to
});

$someElem.on('click', (evt) => {
  const $el = $(evt.currentTarget); // the importance of always passing the Event as first param
});