仅在jQueryUI自动完成选择事件时设置值

时间:2016-07-22 13:56:49

标签: jquery jquery-ui autocomplete

我有一个自动填充功能,可以在SomeClass事件中设置#resource_id的值。如果发生select事件,但用户继续编辑select,我希望删除#resourceFile被发布(或设置为零或NULL,以便服务器知道)。

以下脚本不起作用,因为#resource_id事件发生在change事件后,即使select以后未发生更改。

如何实现这一目标?

#resourceFile

$(".addResource").click(function() {$("#dialog-addResource").dialog("open");});
$("#dialog-addResource").dialog({
    autoOpen: false, resizable:false, height: 200, width: 600, modal: true,
    open: function() {
        $('#resourceFile').val('');
        $('#resource_id').val('');
    },
    buttons: [
        {
            text: 'Save',
            click: function() {
                var data=$(this).find($('#resource_id').val()?':input':':input:not(#resource_id)').serializeArray();
                console.log(this,data)
                $.post('/pages_back/display/addResource',data,function (rsp){
                    console.log(rsp);
                    },'json');
            }
        },
        {
            text: 'Cancel',
            click    : function() {$(this).dialog("close");}
        }
    ]
});

$("#resourceFile").autocomplete({
    source: "/pages_back/display/getResources",
    minLength: 2,
    select: function( event, ui ) {
        console.log('set');
        $('#resource_id').val(ui.item.id);
    },
    change: function( event, ui ) {
        console.log('changed');
        $('#resource_id').val('');  //Is it better to set to null or use removeAttr('value')?
    }
});

1 个答案:

答案 0 :(得分:0)

不是一个非常优雅的解决方案,但以下方法可行:

$("#resourceFile").autocomplete({
    source: "/pages_back/display/getResources",
    minLength: 2,
    select: function( event, ui ) {
        console.log('set',ui);
        $('#resources_id').val(ui.item.id).data('name',ui.item.value);
    },
    change: function( event, ui ) {
        console.log('changed');
        if($('#resources_id').data('name')!=$('#resourceFile').val()) {
            $('#resources_id').val('');  //Is it better to set to null or use removeAttr('value')?
        }
    }
});
相关问题