2016-03-23 4 views
0

Situation: Meine App führt eine AJAX-Anforderung aus und die empfangenen Daten werden im folgenden JQgrid angezeigt. listData(data) ist eine Funktion, die in success Rückruf dieser Ajax-Anforderung aufgerufen wirdOnclick Ereignis des Knopfes in jeder Reihe gesetzt jqgrid nicht feuernd?

data ist die JSON-Daten von Anfrage erhalten.

buildJqGrid ist eine benutzerdefinierte Funktion, die die .jqgrid() auf einer Tabelle und einem div HTML-Element aufruft.

buttonFormatter ist meine benutzerdefinierten Formatierer für die Spalte mit dem Namen Action

function listData(data) { 
    var containerName = 'datatablea3', 
     columnNames = ["Name", 
      "Email", 
      "Language", 
      "Office", 
      "alter email", 
      "Action" 
     ], 
     columnModels = [{ 
      name: 'Name', 
      index: 'Name', 
      width: '200px' 
     },{ 
      name: 'Email', 
      index: 'Email', 
      width: '200px' 
     }, { 
      name: 'Language', 
      index: 'Language', 
      width: '200px' 
     }, { 
      name: 'Office', 
      index: 'Office', 
      width: '200px' 
     }, { 
      name: 'AlterEmail', 
      index: 'AlterEmail', 
      width: '200px' 
     }, { 
      name: 'action', 
      width: '200px', 
      formatter: buttonFormatter 
     }], 
     sortColumnName = 'Name', 
     caption = "Employees", 
     rowNum = 25, 
     pager = '#pager2a3', 
     grouping = false, 
     groupingView = {}, 
     rowList = [25, 50, 100]; 

    buildJqGrid(containerName, data, columnNames, columnModels, 
      sortColumnName, caption, rowNum, pager, grouping, 
       groupingView, rowList, true, 'asc'); 
} 

Problem: Wenn dieses jsp ausgeführt Daten erfolgreich in der jqgrid mit Blick Schaltfläche in jedem Datensatz angezeigt wird, aber wenn ich auf die Schaltfläche view button nichts passiert!

Ich habe in der Konsole überprüft es zeigt "Kontrolle in Formatierer", aber beim Klicken auf Ansicht Schaltfläche zeigt es nicht "Kontrolle in Klick-Funktion".

Ich habe versucht, auch dort editLink Formatierer, aber immer noch denselben Fehler verwenden,

Kann mir jemand bitte sagen, warum onclick Ereignis meiner Schaltfläche Brennen nicht wahr?

+0

Ich glaube, Sie somthing wie diese tun müssen ' Ansicht'; –

+0

können Sie ** mehr vollständigen JavaScript-Code **, den Sie verwenden (der Code von 'BuildJqGrid' zum Beispiel)? Welche Version von jqGrid und von welchem ​​Fork von jqGrid verwendest du? ([freies jqGrid] (https://github.com/free-jqgrid/jqGrid), kommerzielles [Guriddo jqGrid JS] (http://guriddo.net/?page_id=103334) oder ein altes jqGrid in Version <= 4.7). Ihr aktueller Code ist sehr dreckig ('width: '200px'' zum Beispiel sollte auf Zahlen fixiert sein:' width: 200'). Binding to Click kann auf andere Weise implementiert werden. Die beste Wahl hängt von dem fork und der Version von jqGrid ab, die Sie verwenden. – Oleg

Antwort

0

"Klicken" ist bereits eine Funktion, und daher überschreiben Sie es, und nichts wird ausgelöst.

Versuchen Sie, diese

function buttonFormatter(cellvalue, options, rowObject) 
{ 
console.log("control in button formatter"); 
return '<button onclick=\"clickFunction();\">View</button>'; 
} 
function clickFunction() 
{ 
    console.log("control in click function"); 
    alert("hello"); 
} 

Einfache Geige: https://jsfiddle.net/virginieLGB/5e5LL5po/1/

+0

Vielen Dank Mam! Es funktioniert, können Sie bitte erklären, warum mein ursprünglicher Code nicht funktioniert – varunsinghal65

+0

@ varunsinghal65 kein Problem :) Wie ich schon sagte, Sie waren die ursprüngliche Javascript "Klick" -Funktion, die die Funktion, die Sie wollen, ruft. Wenn Sie es überschreiben, ruft Javascript einfach Ihre eigene Methode nicht auf.Ich weiß nicht, ob ich klar genug bin, aber im Grunde nicht übersteuern: p – VirginieLGB

+0

mam könnten Sie mir bitte sagen, warum meine Rückkehr Aussage nicht funktioniert hat, und was meinst du mit "Klick ist bereits eine Funktion und deshalb überschreiben Sie es und nichts feuert " – varunsinghal65

0

wie diese versuchen, ich auch gleiche Funktionalität (JQ Grid) in meinem Projekt verwenden, versuchen HTML-Eingabetyp anstatt die Taste,

Wenn Sie Ihren Code verwenden, klicken Sie auf Ereignis wurde ausgelöst, aber die gesamte Webseite wird neu geladen.

function buttonFormatter(cellvalue, options, rowObject) { 
 
    if (rowObject.Status != "Not Started") { 
 
     console.log("Zumbaa"); 
 
     var edit = "<input class='Viewbtn' type='button' value='View' onclick=\"ShowMigrationProcess(" + cellvalue + ");\" />"; 
 
     return edit; 
 
    } 
 
    return ''; 
 
}