gpt4 book ai didi

javascript - 创建一个网络服务器控件来模仿 jquery 自动完成 API

转载 作者:行者123 更新时间:2023-11-30 06:42:02 24 4
gpt4 key购买 nike

我正在尝试为使用 jQuery auto-complete 的自动完成下拉菜单创建一个 ASP .Net (VB.Net) 自定义控件.

基本流程是控件的使用者将设置一些属性(例如数据源),然后将其作为 javascript 注入(inject)以初始化自动完成。

涉及到很多部分,所以我可能遗漏了一些代码,如果您认为缺少某些内容,请发表评论,我会添加它。

消费者背后的代码(PreInit 事件):

myDropDown.DataCallback = "testFunc";

控件中的 DataCallback 属性:

Public Property DataCallback As String

控制代码后面的选项对象创建和javascript注入(inject)(PreRender事件):

Dim _serializer As New JavaScriptSerializer()
Dim optionsObject As New Dictionary(Of String, Object)
optionsObject.Add("source", DataCallback)
Dim optionsJSON = _serializer.Serialize(optionsObject)

Dim initializeScript = String.Format("initialize('{0}', {1});", ClientID, optionsJSON)
Attributes.Add("onfocusin", initializeScript)

最后是 javascript:

var initialize = function (controlID, options) {
if (options) {
$('#' + controlID).autocomplete(options);
}

// remove the blur event handler that called this initialize function
$('#' + controlID).removeAttr('onfocusin');
};

当我调试到 initialize 函数时,我看到 options 有一个属性,source,带有字符串 "testFunc" 因为它的值(value)。我需要的是 source 的值为 testFunc(不是字符串),因此它可以作为自动完成中的回调执行,而不是自动完成认为它是一个 URL .

最佳答案

纠正此问题的最简单方法是进行一些模式识别。出现问题是因为字符串属性被序列化为字符串并用引号引起来。相反,您希望它代表一个对象引用,这意味着去掉那些引号。要删除引号,可以将一个简单的正则表达式应用于序列化对象字符串:

Dim optionsJSON = _serializer.Serialize(optionsObject)
optionsJSON = Regex.Replace(optionsJSON , "(?<=""source"":)""(.+?)""", "$1")

这将执行的操作是查找以文本 "source": 开头的引用字符串,并捕获其中的内容以捕获组 #1。然后它将用内部文本替换整个匹配项,有效地删除回调函数名称两侧的引号。

关于javascript - 创建一个网络服务器控件来模仿 jquery 自动完成 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10418800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com