在jquery中更改另一个文本框时动态设置一个文本框值

Posted

技术标签:

【中文标题】在jquery中更改另一个文本框时动态设置一个文本框值【英文标题】:set one textbox value dynamically while change on another textbox in jquery 【发布时间】:2014-09-25 09:41:08 【问题描述】:

我正在尝试使用 jquery 执行类似 asp.net textchanged 事件。当我使用自动完成更改一个 tetbox 值时,另一个文本框会发生变化。数据将来自我的数据库。假设我有两个文本框 txtOne 和 TxtTwo。当我使用自动完成 txtTwo 值更改 txtone 时,数据库中的 accorindg 会更改为 txtOne。 这是我的代码。我究竟做错了什么?我如何在 mvc 的同一个文本框中实现 Autocomplete 和 Textchange 事件。

 @html.TextBoxFor(model => model.ITEMNM, htmlAttributes: new  @class = "form-control", id = "txtOne" )
 @Html.TextBoxFor(model => model.ITEMNM, htmlAttributes: new  @class = "form-control", id = "txtTwo" )

<script language="javascript" type="text/javascript">

    $(document).ready(function () 
        $('#txtOne').autocomplete(
        
            source: '@Url.Action("TagSearch", "RMS_ITEM")'
        );
    );

    $(function () 
        $('#txtOne').change(function () 
            var changedText = $("#txtOne").val();

            $.post('@Url.Action("ItemNameChanged","RMS_ITEM")',  "ChangedText": changedText );

        );
    );

</script>

这是我的控制器代码

[HttpPost]
public ActionResult ItemNameChanged(string changedText)

    var result = (from n in db.PosItemMstDbSet
                  where n.CATNM == changedText
                  select new
                  
                      catid = n.CATID

                  
                );

    foreach (var n in result)
    
        ViewBag.itemId = n.catid;
    
    //return changedText + " was submitted!";
    return null;


public JsonResult TagSearch(string term)

    var compid = Convert.ToInt16(System.Web.HttpContext.Current.Session["loggedCompID"].ToString());


    var tags = from p in db.PosItemMstDbSet
               where p.COMPID == compid
               select p.CATNM;

    return this.Json(tags.Where(t => t.StartsWith(term)),
                    JsonRequestBehavior.AllowGet);

【问题讨论】:

【参考方案1】:

好吧,我已经解决了我的问题。谢谢大家...

这是我的脚本代码

<script language="javascript" type="text/javascript">

    $(document).ready(function () 
        $('#txtItemNm').autocomplete(
        
            source: '@Url.Action("TagSearch", "RMS_ITEM")',
            change: txtOneChanged
        );
    );

    function txtOneChanged()
    

        var changedText = $("#txtItemNm").val();
        var txtBox = document.getElementById('catid');



        $.getJSON(
        "/RMS_ITEM/ItemNameChanged",  "ChangedText": changedText ,
        function (myData) 
            txtBox.value = myData;
        );
    
</script>

这是我的控制器方法

[AcceptVerbs(HttpVerbs.Get)]
        public JsonResult ItemNameChanged(string changedText)
        
            var compid = Convert.ToInt16(System.Web.HttpContext.Current.Session["loggedCompID"].ToString());
            var itemId = "";



            var rt = db.PosItemMstDbSet.Where(n => n.CATNM == changedText &&
                                                         n.COMPID == compid).Select(n => new
                                                         
                                                             catid = n.CATID
                                                         );
            foreach (var n in rt)
            
                itemId = n.catid;
            
            return Json(itemId, JsonRequestBehavior.AllowGet);

        

        public JsonResult TagSearch(string term)
        
            var compid = Convert.ToInt16(System.Web.HttpContext.Current.Session["loggedCompID"].ToString());


            var tags = from p in db.PosItemMstDbSet
                       where p.COMPID == compid
                       select p.CATNM;

            return this.Json(tags.Where(t => t.StartsWith(term)),
                            JsonRequestBehavior.AllowGet);
        

【讨论】:

【参考方案2】:

您需要为自动完成调用定义change 选项:

$("#txtOne").autocomplete(

  source: '@Url.Action("TagSearch", "RMS_ITEM")'
  change: txtOneChanged
);

function txtOneChanged()

    // your custom code

查看这个 JSFiddle:

http://jsfiddle.net/w1vs0rqn/

【讨论】:

非常感谢!另一个问题,我如何捕获 json 数据并使用从我的控制器返回的 jquery 将其设置到我的文本框?

以上是关于在jquery中更改另一个文本框时动态设置一个文本框值的主要内容,如果未能解决你的问题,请参考以下文章

动态点击功能

如何通过 jQuery 动态更改内容编辑器 Web 部件标题?

在 jQuery 中填充文本框时执行 javascript 函数?

使用带有 jquery ui 滑块的淘汰赛 js

当我输入一个文本框时,我会填充一些文本框

jquery 一个按钮点击,复制文本内容