2016-09-22 10 views
0

Ich habe versucht, dieses Problem ohne Glück herauszufinden. Ich mache eine Ajax-Post, um eine Liste von Kursen zu bekommen. Es gibt zwei Möglichkeiten, die Liste zu erhalten. Der Benutzer kann auf eine Suchschaltfläche klicken oder die Eingabetaste drücken. Klicken auf den Suchknopf funktioniert und gibt die Liste der Kurse in Ordnung zurück; Drücken der Eingabetaste funktioniert jedoch nicht. Es gibt immer einen Fehler "jqXHR.status = 0 - nicht verbunden."Ajax Post Call funktioniert nicht auf KeyUp

Dies sind die beiden Ereignisse, die PerformSearch() aufrufen.

Dieses Keyup-Ereignis funktioniert nicht.

$('#searchFor').on('keyup', function (event) { 
    event.preventDefault(); 
    if (event.which === 13) { 
     // $('#SearchCourses').click(); 
     PerformSearch(); 
    } 
}) 

Das Click-Ereignis funktioniert gut.

$('#SearchCourses').on('click', function (event) { 
    event.preventDefault(); 
    PerformSearch(); 
}) 


    var PerformSearch = function() { 
     var searchValue = $('#SearchCourses').val(); 
     var searchType = $('#searchFor').val(); 
     var courseObj = {}; 
     var Course = {}; 
     Course.searchValue = searchValue; 
     Course.searchType = searchType; 

     courseObj.data = JSON.stringify({ "courseObj": Course }); 
     courseObj.contentType = 'application/json'; 
     courseObj.method = 'post'; 
     courseObj.url = '/Home/GetCourses'; 
     courseObj.dataType = 'html'; 
     PostAPI(courseObj, DisplayCourses); //This is just doing the post nothing interested in the PostAPI. 
    }; 

    var DisplayCourses = function (result) { 
     if (!result.Error) { 
      $('#CourseList').html(result.data); 
     } 
    } 

// Die Server-Seite Code, der die Liste der Kurse zurück.

public ActionResult GetCourses(Course courseObj) 
    { 
    . 
    . 
    . 
    return PartialView("Courses", courses); 
} 

Die Veranstaltung einreicht, die gesamte Seite, anstatt nur den Kurs-Objekt.

+0

Jede Probe Geige das Formular Vorlage zu stoppen? – Vatsal

+3

Wenn Sie das in einem Formular festhalten und stattdessen das Ereignis "submit" verwenden, ersparen Sie sich viel Kummer. Ansonsten scheint das Problem nicht der gepostete Code zu sein, sie rufen beide die gleiche Funktion auf, und diese Funktion wird nicht gepostet, so dass wir keine Ahnung haben, was sie tut. – adeneo

+0

Ich habe ein anderes Eingabefeld mit dem gleichen Namen und einer anderen ID hinzugefügt. Dann beginnt das Ereignis für das ursprüngliche Textfeld zu arbeiten. Im Moment ergibt das keinen Sinn für mich. –

Antwort

0

Probieren Sie es aus:

$('#searchFor').bind('keypress', function (e) { 
        var code = e.keyCode || e.which; 
        if (code == 13) { //Enter keycode 
         //Do something 
         PerformSearch(); 
        } 
       }); 
+0

jQuery normalisiert es so, was gut ist ... – epascarello

0

Sie benötigen

if (event.which === 13) { 
    event.preventDefault(); 
    PerformSearch(); 
}