Good Day Guys
This is an MVC , JQuery, KNockout.js Question.
i have a Controller Action that is being Defined like this
Code:[HttpGet] public JsonResult SearchCars(string searchString) { string[] searchTerms = (searchString).ToUpper().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); string[] searchTermSounds = new string[searchTerms.Length]; var list = (from r in Cache.CarSearchItems select new Lightstone.UI.Web.LaceWebUI.Models.CarItem(r, searchTerms, searchTermSounds)).ToList(); var list1 = list.Distinct() .Take(5) .OrderByDescending(l => l.Hits).ToList(); return Json(list1, JsonRequestBehavior.AllowGet); }
and i have a Jquery function that gets fired onkey up event is fired in a textbox like this
dont mind my alerts i use them to check the code reaches the place that i want it to reach. I can get the Jason the first time and this is the order of my alertsCode:$(function () { $("#txtSearchString").keyup(function () { $("#txtSearchString").queue(function () { var _this = $(this); _this.addClass("newcolor"); _this.dequeue(); }); if ($("#txtSearchString").val().length >= 3) { var data = {} data.searchString = $("#txtSearchString").val(); alert("Retrieving Data"); $.getJSON("/Cars/SearchCars", data, function (result) { //Autocomplete binding var viewModel = null; viewModel = { SearchOptions: ko.observableArray(result) // These are the initial options } alert("Done Retrieving Data"); if (viewModel == null || viewModel == undefined) { alert("The ViewModel is null or Undefined"); alert("Done with the View Model"); } else { ko.applyBindings(viewModel); alert("THe View Model is no Null"); } }); } }) });
and then i bind the data to my HTML view as depicted belowCode:alert("Retrieving Data"); alert("Done Retrieving Data"); alert("THe View Model is no Null");
Code:<table id="tblsearchresults" data-bind="foreach:SearchOptions" class="auto-style1"> <tr> <td rowspan="5"> <img data-bind="attr: {src: Url}" class="" /> </td> <td>Make:</td> <td> <div data-bind="text: Make"> </div> </td> <td> </td> </tr> <tr> <td>Model:</td> <td> <div data-bind="text: Model"> </div> </td> <td> </td> </tr> <tr> <td>Year:</td> <td> <div data-bind="text: Year"> </div> </td> <td> <a data-bind="attr: { href: UrlRedirect }"> View Report</a> </td> </tr> <tr> <td> </td> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> <td> </td> </tr> </table>
and i see the data when i search for the first time and the images appears nicely and then the Problem start when i change my search string lets say i now type "FORD"
Code:<input id="txtSearchString" name="txtSearchString" class="searchText" />
and it does not return results, when i look at the F12 debugging tool in chrome it point to my JavaScript in the following line
and in myCode:ko.applyBindings(viewModel);
So everytime i do my search for the first time it works but for the second time it does not.Code:Uncaught Error: NOT_FOUND_ERR: DOM Exception 8 knockout-2.1.0.js:46 a.e.Fa knockout-2.1.0.js:46 a.a.Oa knockout-2.1.0.js:81 a.Fb.a.h.disposeWhenNodeIsRemoved knockout-2.1.0.js:75 e knockout-2.1.0.js:34 a.h knockout-2.1.0.js:36 a.Fb knockout-2.1.0.js:75 a.c.template.update knockout-2.1.0.js:76 a.c.foreach.update knockout-2.1.0.js:66 a.h.disposeWhenNodeIsRemoved knockout-2.1.0.js:51 e knockout-2.1.0.js:34 a.h knockout-2.1.0.js:36 d knockout-2.1.0.js:49 c knockout-2.1.0.js:49 b knockout-2.1.0.js:49 c knockout-2.1.0.js:49 b knockout-2.1.0.js:49 c knockout-2.1.0.js:49 b knockout-2.1.0.js:49 c knockout-2.1.0.js:49 b knockout-2.1.0.js:49 c knockout-2.1.0.js:49 b knockout-2.1.0.js:49 c knockout-2.1.0.js:49 a.xa knockout-2.1.0.js:52 (anonymous function) AutoCompleteResults.js:33 jQuery.Callbacks.fire jquery-1.7.2.js:1075 jQuery.Callbacks.self.fireWith jquery-1.7.2.js:1193 done jquery-1.7.2.js:7538 jQuery.ajaxTransport.send.callback jquery-1.7.2.js:8324
One other solution that i need is to delay the call of the keypress for 250 milliseconds.
Thanks


Reply With Quote
