javascript - dataEvents 和 .change() 方法在 jqgrid/jquery 中不起作用

标签 javascript jquery jqgrid

我有一个 jqgrid,有以下两列:OwnerNotifyUsersNotifyUser 取决于 Owner 列的值。就像国家 -> 州 -> 城市。

 {name:'owner',index:'owner',width:80,hidden:false,search:false,align:'center',
        edittype:'select',editable:true},

{name:'notifyUsers',index:'notifyUsers',width:100,hidden:false,search:false,align:'center',
    edittype:'select',editable:true,editoptions:{ value:'${notifiedUserList}', multiple: true}},

我正在做表单编辑。当我们选择任何行时,我有下面的代码来填充这两个 SelectBox。

 ondblClickRow: function(rowid) {               
        $("#searchcriteraigrid").setColProp('owner', {editoptions:{dataUrl:'getUserList.html?critId=' + rowid}});
        $("#searchcriteraigrid").setColProp('notifyUsers', {editoptions:{dataUrl:'getNotifiedUSerList.html?critId=' + rowid, multiple: true}});
)};

到目前为止没有问题。

但我需要根据 Owner 下拉列表的值填充 NotifyUsers 下拉列表。

我尝试了两种方法,例如在所有者列中使用以下代码。

editoptions:{                           
  dataEvents: [
      {
        type: 'change',
        fn: function(e) {
        modifyNotifyUsers(e);
        }
      }
    ]
},

并修改NotifyUsers(e)某处写为

function modifyNotifyUsers(e){
  var userId = $(e.target).val();
  $.ajax({
      url:"getNotifiedUsersOnOwner.html?userId="+userId,
      type: "get",
      success:function(newOptions){
      var form = $(e.target).closest("form.FormGrid");
      $("select#notifyUsers.FormElement",form[0]).html(newOptions);
   }
 });
} 

这种方法不起作用,因为我认为,我在 Owner 列的 editoptions 中没有使用 value 属性。 我尝试也在 editopions 中使用 dataUrl 但我的 url 是动态的,这就是为什么我必须将 dataUrlondblClickRow() 一起使用>

我尝试在 Owner 下拉列表的更改上调用简单的 jquery 方法,如下所示。

$('#owner').change(function(){
     $('#searchcriteraigrid').setColProp('notifyUsers',{
      editoptions:{
         dataUrl:'getNotifiedUsersOnOwner.html?crit'+$('#criteriaId').val()
       }
  });       

但是这个方法调用也没有发生。讽刺的是,当我将页面保存为简单的 HTML 并在浏览器中打开该 HTML 时,就会发生此方法调用。我可以通过在方法中添加一些警报来查看。

您能否帮助我以任何方式使其正常工作,或者建议我做错了什么以及哪里做错了。

最佳答案

我使用下面的代码解决了这个问题。我不知道 .change() 不起作用但 .live('change') 起作用的原因是什么。后来我进行了 ajx 调用并动态设置我的选择框。

$('#owner').live('change', function() {
    var val = $('#owner').val();
        $.ajax({
          type: "post",
          url: 'getNotifiedUsersOnOwner.html?userId='+val,
          success: function(response) {                 
            $("#notifyUsers").html(response);
          }
       });
});

如果您有更好的方法,请提供建议。谢谢

关于javascript - dataEvents 和 .change() 方法在 jqgrid/jquery 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23928262/

相关文章:

javascript - 如何在 JSON 中表示包含空元素的数组?

JavaScript 日期时间字符串转换为秒?

javascript - 发送用户定义的对象作为参数并存储在数组中并获取所需的值

jquery - 使用默认主题在 Nivo Slider 上居中图像?

jquery - jqgrid 中带有 anchor 和图像的 Showlink 自定义格式化程序

javascript - 您可以使用 detectmobilebrowser 链接样式表吗?

javascript - 如何使用 request.query 获取变量

javascript - 使用 jQuery 确定 'Revealing Module Pattern' 模块的范围

javascript - jqgrid设置一行的背景

jquery - jqgrid 的通用搜索字段