$(这)不能正常工作x-editable

jab*_*bez 3 jquery this edit-in-place

我正在尝试设置动态检索pk并且此选择器不起作用,这是我的代码:

#html file
<div id="{{task.id}}">
                <h3>
                    <a href="#" id="task">{{ task.task }}</a>
                </h3>
...
</div>

#js file
$("#task").editable({
    type: 'text',
    **pk:  $(this).closest('div').attr('id'),**
    url: '/update_task/' + pk + '/',
    title: 'Enter task',

});
Run Code Online (Sandbox Code Playgroud)

这个不起作用,但如果我写:

pk:  $("#task").closest('div').attr('id')
Run Code Online (Sandbox Code Playgroud)

会工作,但对我来说不方便.

先感谢您 :)

kar*_*m79 5

this是指options对象,而不是jQuery对象.如果你有一个从你想要提取主键的一次性字段发送到服务器,那么我只会这样做:

var $task = $("#task");
$task.editable({
    type: 'text',
    pk:  $task.attr("id"),
    url: '/update_task/' + pk + '/',
    title: 'Enter task',
});
Run Code Online (Sandbox Code Playgroud)

如果您使用更通用的选择器,例如.someDiv并希望pk每个选择器,您可以使用params带回调的选项,这允许您附加/覆盖要发送的数据,具体取决于您是传递对象还是功能(功能覆盖,请参阅文档):

$(".someDiv").editable({
    type: 'text',
    pk:  0,

    // hooray, params takes a callback so
    // we can get the right context
    params: function (params) {
        var data = {};
        data.pk = $(this).closest("div").attr("id"),
        data.makesure = "You know that this will overwrite the original params object";
        data.soPut = "Everything you need into it before returning";
        return data;
    },
    url: '/update_task/' + pk + '/',
    title: 'Enter task'
});
Run Code Online (Sandbox Code Playgroud)

ps pk似乎也接受了一个函数,所以我猜你可以这样做,但我现在无法测试:

$("#task").editable({
    type: 'text',
    pk:  function () {
        return $(this).closest("div").attr("id");
    },
    url: '/update_task/' + pk + '/',
    title: 'Enter task'
});
Run Code Online (Sandbox Code Playgroud)