2014-09-25 80 views
0

我正在嘗試使用jQuery來做類似asp.net textchanged事件的事情。當我使用自動完成更改一個tetbox值時,將會在另一個文本框中進行更改。數據將來自我的數據庫。假設我有兩個文本框txtOne和TxtTwo。當我使用自動完成txtTwo更改txtone的值將從數據庫更改爲txtOne。 這是我的代碼。我究竟做錯了什麼?我怎麼能在mvc中的同一個文本框中實現自動完成和Textchange事件。動態設置一個文本框的值,同時在jQuery中的另一個文本框上更改

@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); 
} 

回答

0

您需要定義自動完成呼叫change選項:

$("#txtOne").autocomplete(
{ 
    source: '@Url.Action("TagSearch", "RMS_ITEM")' 
    change: txtOneChanged 
}); 

function txtOneChanged() 
{ 
    // your custom code 
} 

看看這個的jsfiddle:

http://jsfiddle.net/w1vs0rqn/

+0

非常感謝! 另一個問題,我怎麼能抓住JSON數據,並將其設置到我的文本框使用從我的contorller返回的jquery? – 2014-09-25 13:53:18

2

以及我已經解決了我的問題。在這裏感謝大家......

是我的腳本代碼

<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); 
     } 
相關問題