2012-04-05 58 views
7

在下面的代码片段的价值,但在UI显示标签,中联,我怎么能得到jQuery的自动完成插件:jQuery用户界面自动完成更新的隐藏字段与ASMX

  1. 更新的隐藏字段与用户名
  2. 更新“#MessageTo”用全名

我相信我需要使用。结果,但我想不通的语法。请注意,我使用ASMX所以我必须做一个职位(不希望启用安全风险)

$("#MessageTo").autocomplete({ 
     dataType: "json", 
     autoFocus: true, 
     minLength: 3, 
     source: function (request, response) { 
      var postParams = "{ pattern: '" + $("#MessageTo").val() + "' }"; 

      return jQuery_1_7_1.ajax({ 
       type: "POST", 
       contentType: "application/json; charset=utf-8", 
       url: '/Services/Users.asmx/GetNames', 
       data: postParams, 
       dataType: "json", 
       success: function (data) { 
        response($.map(data.d.Users, function (c) { 
         return { 
          label: c.FullName, 
          value: c.UserID 
         }; 
        })); 
       } 
      }); 
     } 
    }); 

我看到一些类似的职位,但没有与ASMX结合。

+0

data.d是什么'd'属性? – Kiquenet 2018-02-02 12:24:13

+0

响应(数据)还包含json对象中的有用数据d – Hoppe 2018-02-04 15:51:20

回答

7

我相信你有兴趣更新页面上的其他HTML元素,当用户从启用自动完成的文本框中选择一些东西时 - 是吗?

上面的代码可能已经可以工作,可以在用户输入时提供自动填充“建议”。如果我理解正确,那么在用户接受其中一个建议后,您希望更新几个字段。s要使用自动完成选项的select成员,请使用select

$("#MessageTo") 
    .autocomplete({ 
     dataType: "json", 
     autoFocus: true, 
     minLength: 3, 
     source: function (request, response) { 
      var postParams = "{ pattern: '" + $("#MessageTo").val() + "' }"; 

      return jQuery_1_7_1.ajax({ 
       type: "POST", 
       contentType: "application/json; charset=utf-8", 
       url: '/Services/Users.asmx/GetNames', 
       data: postParams, 
       dataType: "json", 
       success: function (data) { 
        response($.map(data.d.Users, function (c) { 
         return { 
          label: c.FullName, 
          value: c.UserID 
         }; 
        })); 
       } 
      }); 
     }, 

     select: function (event, ui) { 
      var v = ui.item.value; 
      $('#MessageTo').html("Something here" + v); 
      $('#Hidden1').html("Something else here" + v); 
      // update what is displayed in the textbox 
      this.value = v; 
      return false; 
     } 

    }); 

此外:您使用ASMX是无关紧要的。从自动完成的角度来看,它只是数据的来源。而且,POST的使用是无关紧要的。可以在服务器端配置ASMX以允许HTTP GET。如果启用它不是安全漏洞。这只是接受请求的不同方式。

自动填充框无法判断服务器端是ASMX还是Python,或者ASP-classic或PHP,或其他。如果我已经正确地理解了这个问题,您的评论我看到一些类似的帖子,但不与ASMX联合是无关紧要的。

+0

也使用ui.item.label以获取全名以显示在自动填充中。 – Prusprus 2012-06-15 17:50:01

7

你是对的,你想使用选择配置选项 - 你想要的值被传递到你的自定义函数ui.item.valueui.item.label。您可以使用return false来防止默认行为,并使用this访问目标元素。即

$("#MessageTo").autocomplete({ 
    /* Existing code is all OK */ 

    select: function (event, ui) { 
     // Set autocomplete element to display the label 
     this.value = ui.item.label; 

     // Store value in hidden field 
     $('#hidden_field').val(ui.item.value); 

     // Prevent default behaviour 
     return false; 
    } 
}); 
相关问题