【问题标题】:Set value only upon jQueryUI autocomplete select event仅在 jQueryUI 自动完成选择事件时设置值
【发布时间】:2016-07-22 13:56:48
【问题描述】:

我有一个自动完成功能,它将根据select 事件设置#resource_id 的值。如果发生select 事件,但随后用户继续编辑#resourceFile,我希望删除#resource_id 的发布(或设置为零或NULL,以便服务器知道)。

以下脚本不起作用,因为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')?
    }
});

.

<div id="dialog-addResource" title="Add Resource" style="display:none">
    <span>Add Resource: </span>
    <input type="text" id="resourceFile" name="file" />
    <input type="hidden" id="resource_id" name="resource_id" />
    <input type="hidden" name="page_id" value="{{ id }}" />
</div>

【问题讨论】:

  • “继续编辑资源文件”是指继续在自动完成框中添加或删除字符,还是其他?
  • @BobRodes 正如你所说。

标签: jquery jquery-ui autocomplete


【解决方案1】:

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

$("#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')?
        }
    }
});

【讨论】:

  • data 功能在相当广泛的边缘情况下派上用场。 :)
  • @BobRodes 是的!我正在考虑使用全局变量,但这更不优雅。谢谢
  • 是的,是的。我发现data 在对话框中显示子表时特别有用,可以将父 ID 传递到子表上下文中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-29
  • 2011-12-05
  • 2014-11-19
  • 2012-03-29
  • 1970-01-01
  • 2011-08-29
相关资源
最近更新 更多