当前位置: 首页 > 面试题库 >

在jqGrid的行中添加自定义按钮?

曾瀚昂
2023-03-14
问题内容

我想制作一个简单的表,其中包含一行自定义按钮。当按下按钮时,我想弹出一个“警告”框。我已经阅读了一些关于此的文章,我不明白为什么我的代码无法正常工作。绘制了按钮,但按下按钮无效。

我在这里描述了三种尝试。

版本1。单击按钮不会触发:

  $(document).ready(function(){
      jQuery("#simpletable").jqGrid({
         datatype: "local",
        colNames:['A','B','Status'],
        colModel:[
        {name:'A',index:'A'},
        {name:'B',index:'B'},
        {name:'status',index:status}
    ],
        data:[ 
        {'A':2,'B':100,'status':"<button  onclick=\"jQuery('#simpletable').saveRow('1', function(){alert('you are in')});\" >in</button>"},
        {'A':1,'B':200,'status':"<button onclick=\"jQuery('#simpletable').saveRow('2', function(){alert('you are in')});\" >in</button>"},
        ],
        caption: "Demo of Custom Clickable Button in Row",
        viewrecords:true,
        editurl:'clientArray',
    });

   });

HTML代码:

<table id="simpletable"></table>

编辑8/2/12-自从我的原始文章以来,我已经学到了一些东西,在这里我描述了另外两次尝试。

版本2:我使用onCellSelect。这行得通,但不允许我在一个单元格中放置多个按钮。此外,我通过使用本文中评论之一建议的format选项使代码更好。

function status_button_maker_v2(cellvalue, options, rowObject){
    return "<button class=\"ver2_statusbutton\">"+cellvalue+"</button>"
};

jQuery("#simpletablev2").jqGrid({
    datatype: "local",
    colNames:['A','B','Status'],
    colModel:[
    {name:'A',index:'A'},
    {name:'B',index:'B'},
    {name:'status',index:status,editable:true,formatter:status_button_maker_v2}
    ],
        data:[ 
    {'A':2,'B':100,'status':"In"},
    {'A':1,'B':200,'status':"Out"}
        ],

    onCellSelect:function(rowid,icol,cellcontent,e){
    if (icol==2){

        alert('My value in column A is: '+$("#simpletablev2").getRowData(rowid)['A']);
    }else{
        return true;
    }
    },

    caption: "Demo of Custom Clickable Button in Row, ver 2",
    viewrecords:true,
});  //end simpletablev2

标记:

<style>.ver2_statusbutton { color:blue;} </style>
<h3>simple table, ver 2:</h3>
<table id="simpletablev2"></table>

版本3:我尝试将解决方案用于w4ik的发布,使用“ .on”而不是不推荐的“
.live”。这将导致单击按钮触发,但是我不知道如何检索该rowid。w4ik对此也很挣扎,他说自己已经解决了,但是没有做到。我可以选择最后一行,但这将始终引用选择的上一行,因为该按钮具有优先权。

如果可以使用,我会更喜欢此解决方案。

jQuery("#simpletablev3").jqGrid({
    datatype: "local",
    colNames:['A','B','Status'],
    colModel:[
    {name:'A',index:'A'},
    {name:'B',index:'B'},
    {name:'status',index:status,editable:true,formatter:status_button_maker_v3}
    ],
        data:[ 
    {'A':2,'B':100,'status':"In"},
    {'A':1,'B':200,'status':"Out"}
        ],
    caption: "Demo of Custom Clickable Button in Row, ver 3",
    viewrecords:true,
    onSelectRow: function(){},
    gridComplete: function(){}
});  //end simpletablev3


$(".ver3_statusbutton").on(
    {
    click: function(){
        //how to get the row id?  the following does not work
        //var rowid = $("#simpletablev3").attr('rowid'); 
        //
        //it also does not work to get the selected row
        //   this is always one click behind:
        //$("#simpletablev3").trigger("reloadGrid");
        rowid = $("#simpletablev3").getGridParam('selrow');
        alert("button pushed! rowid = "+rowid);
    }
    });

标记:

 <style>.ver3_statusbutton {    color:red;} </style>
 <h3>simple table, ver 3:</h3>
 <table id="simpletablev3"></table>

总而言之,我正在努力 在正确的时间
按下按钮的问题。在版本1中,该行被选中,并且按钮从未被按下。版本2完全不使用“按钮”-只是处理单元格的单击。Verion
3在行选择之​​前(错误顺序)单击了按钮。

任何帮助,将不胜感激!


问题答案:

您可以在此处每行使用动作格式化程序,并在formatOptions中将“编辑”和“删除”按钮设置为false,如下所示:

formatoptions: {editbutton:false,delbutton:false}}

并遵循以下两个演示:

http://www.ok-soft-gmbh.com/jqGrid/Admin3.htm

http://ok-soft-gmbh.com/jqGrid/TestSamle/Admin1.htm

这些自定义按钮的点击事件会显示您的警报:

编辑

var getColumnIndexByName = function (grid, columnName) {

                var cm = grid.jqGrid('getGridParam', 'colModel'), i, l = cm.length;

                for (i = 0; i < l; i++) {

                    if (cm[i].name === columnName) {

                        return i; // return the index

                    }

                }

                return -1;

            },

function () {

                var iCol = getColumnIndexByName(grid, 'act');

                $(this).find(">tbody>tr.jqgrow>td:nth-child(" + (iCol + 1) + ")")

                    .each(function() {

                        $("<div>", {

                            title: "Custom",

                            mouseover: function() {

                                $(this).addClass('ui-state-hover');

                            },

                            mouseout: function() {

                                $(this).removeClass('ui-state-hover');

                            },

                            click: function(e) {

                                alert("'Custom' button is clicked in the rowis="+

                                    $(e.target).closest("tr.jqgrow").attr("id") +" !");

                            }

                        }

                      ).css({"margin-right": "5px", float: "left", cursor: "pointer"})

                       .addClass("ui-pg-div ui-inline-custom")

                       .append('<span class="ui-icon ui-icon-document"></span>')

                       .prependTo($(this).children("div"));

                });

            }

如果您检查此代码,我试图通过将列名设置为“ act”来查找索引值,则可以通过提供其他列名来获取其他任何列的索引。

var iCol = getColumnIndexByName(grid, 'Demo'); and the rest of the code will be same for you. //demo is the column name where u want to add custom button

并为该按钮编写点击事件。

让我知道这对您是否有用。



 类似资料:
  • 我正在使用免费的jqGrid 4.12.1。我想在网格中添加、编辑和删除行,并希望为每个操作进行服务器端调用。我添加了编辑URL和“操作”格式化程序,如下所示, 我在下面添加“inlineNav”, 上面添加的“inlineNav”没有任何效果,因为没有在添加新行或删除现有行时进行服务器端调用。只有在编辑的情况下才进行服务器端调用,并且该调用也不会通过上面的“inlineNav”代码进行。因为即使

  • 我已经搜索并尝试了每个论坛和例子。 我正在Yii2中使用Kartik\DetailViwew,无法在buttons1选项中设置一个自定义按钮。 我正在处理的代码: 在的 根据http://demos.krajee.com/detail-view例子,有一种方法可以定制。但是没有例子。留档没有解释如何做到这一点。 有人能帮忙吗?

  • 我做了,有一个按钮,我想在通知和按钮点击上执行两个不同的

  • 我在这里看到了一些例子:http://docs.oracle.com/javase/7/docs/api/javax/swing/joptionpane.html 它似乎表明我应该用一个自定义的按钮列表来替换我的组合框,这不是我想要的。我需要有3个按钮(好的,跳过,取消),以及项目列表。 更新:为了说明我的GUI应该是什么样子: null 目前我的代码如下所示: 灵感来自:Java:showInp

  • 问题内容: 我的网站上有一个jqgrid(版本3.5.3),它是通过对Web服务的Ajax调用获取结果的。查询通常很复杂,加载结果需要花费几秒钟的时间。加载时,用户会看到一个框[Loading …]。 如果用户意识到他们在搜索错误的内容,则客户端要求向网格添加一个取消按钮,这将: 使网格忘记刚刚请求的数据 保留先前搜索中已加载的结果 似乎没有内置任何功能,因此我可能正在寻找一些技巧来实现这一目标。

  • 注意:用户界面已经在 Dreamweaver CC 和更高版本中做了简化。因此,您可能在 Dreamweaver CC 和更高版本中找不到本文中描述的一些选项。有关详细信息,请参阅此文章。 关于自定义服务器行为 Dreamweaver 附带有一组内置的服务器行为,从而让您可以轻松地向站点添加动态功能。您可以扩展 Dreamweaver 功能,方式是通过创建满足您的开发需求的服务器行为,或者通过从