【问题标题】:Can I update an image in jqgrid cell我可以更新 jqgrid 单元格中的图像吗
【发布时间】:2017-05-24 16:44:32
【问题描述】:

您好,我已经通过各种链接更新单元格值,例如 herehere

只要用户点击图像,我就需要更改通过自定义格式化程序放置的图像。所以,我使用了 onCellSelect 事件,我通过这个来获取行的数据

var data = $(this).jqGrid('getRowData', row);

然后我通过这个来改变单元格的值 -

image = "results_not_available.png";
data.colyesno = "<img title ='Detail data not available' src='img/" + image + "' />";

通过setRowData更新单元格值

$(this).jqGrid('setRowData', row, data);

所有其他链接都表明这是一个可行的解决方案。我什至尝试更改任何对我不起作用的字符串列。

我还能做什么?

更新:对我来说,setRowData 是设置单元格的标题,而不是值。

1) 我如何添加图像 -

我正在为此使用自定义格式化程序-

function  resultsImage(cellValue, options, rowdata, action) {
        var image = "";
        if (cellValue == "Y"){
            image = "results_available.png";
            var imageHtml = "<img class=pointer title ='Detail data available. Click to request for data' src='img/" + image + "' />";
            return imageHtml;
        }       
        else if (cellValue == "N"){
            image = "results_not_available.png";
            var imageHtml = "<img title ='Detail data not available' src='img/" + image + "' />";
            return imageHtml;
        }

    }

所以,在单元格内,我放置了一张图片。

在单元格选择时,我正在获取数据并调用一个函数 -

    onCellSelect: function(row, col, content, event) {
      var cm = jQuery(grid).jqGrid("getGridParam", "colModel");
      columnName = cm[col].name;
      var data = $(this).jqGrid('getRowData', row);
      if(columnName == 'col_image')
         callImage(data,content);
      $(this).jqGrid('setRowData', row, data); 
}

现在我在这里检查一些条件,以便需要应用哪个图像。

var callImage = function (data,content){
    if(condition==true) {    ///which is some variable where we make some request to server and it returns backs a variable
      image = "loading_completed.png";
      data.col_image = "<img title ='Click to view data' src='img/" + image + "' />";
      return data
      };
    else {
      image = "loading_error.png";
      data.col_image = "<img title ='No data available' src='img/" + image + "' />";
      return data
      };
    }

因此,如果用户点击不在单元格中的图像,则图像 src 应根据条件更改,并且更改应反映在与旧图像相同的位置。

【问题讨论】:

  • 您只能设置src 属性作为示例。您能否发布onCellSelect 回调的当前代码,我将修改它以使其在不使用setRowData 的情况下工作?如果用户单击旧图像或者如果用户单击单元格内部的某个位置(该单元格包含img,但在&lt;img&gt; 中还有另一个src,您是否希望图像将被更改?
  • @Oleg 我已经根据要求更新了问题

标签: javascript jquery jqgrid


【解决方案1】:

你可以使用onCellSelect回调的event参数。 event.target 将是元素,由用户单击。下面是代码示例:

onCellSelect: function (iRow, iCol, content, event) {
    var cmName = $(this).jqGrid("getGridParam", "colModel")[iCol].name,
        target = event.target;

    if (cmName === "col_image" && target.tagName.toUpperCase() === "IMG") {
        if (condition) { // some kind of testing
            target.src = "img/loading_completed.png";
            target.title = "Click to view data";
            // one can use $(target).attr alternatively
            //$(target).attr({
            //    src: "img/loading_completed.png",
            //    title: "Click to view data"
            //});
        } else {
            target.src = "img/loading_error.png";
            target.title = "No data available";
            // one can use $(target).attr alternatively
            //$(target).attr({
            //    src: "img/loading_error.png",
            //    title: "No data available"
            //});
        }
    }
}

【讨论】:

  • 谢谢先生 :) 我使用 target.onclick 事件来定义新图像上的点击事件,但现在每次它一次又一次地运行相同的 onCellSelect 代码
  • @shv22:不客气!如果您希望我帮助您,您应该始终提供重现问题的演示(在 JSFiddle 中)。我可以立即看到问题,对其进行调试并将修改后的演示发布给您,从而解决问题。如果你只是描述我只能猜测的问题,你会做什么。例如,您是否在onclick 中使用return false;?您可以拨打event.preventDefault()。你可以用beforeSelectRow代替onCellSelect,……我只能猜测你到底做了什么,问题的原因是什么。
  • 先生,我在这里做了演示 jsfiddle.net/adishri22/vwb1c0mk/196。我的问题是,如果我定义了 target.onclick 事件,即使图像被更改,它也会被调用。它应该只在用户点击新图片后调用。
  • @shv22:抱歉,我不明白设置onclick 的目的。您目前可以完全控制 onclick:onCellSelect 将在这种情况下完全执行。为什么不能将oneAlertanotherAlert 中的所有代码直接放在onCellSelect 内?
  • 第一张图片显示数据现在可用如果用户点击图片我们检查我们是否可以从服务器获取数据。在此基础上,我们将更改图像和标题。现在,用户再次点击下载数据。所以,它不能在第一次运行。用户需要再次点击,这就是为什么我需要另一个 onclick 事件以便我能够获取报告
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 2017-06-08
  • 2011-03-01
相关资源
最近更新 更多