处理 input type=‘hidden‘ 的事件触发

文章介绍了如何在摩尔MES的二次开发中处理因表单模型设置导致的hidden字段无法触发事件的问题,通过回调函数和页面初始化绑定实现动态更新。
摘要由CSDN通过智能技术生成

前言

在公司的 MES 系统(摩尔元数N2)做二次开发页面。某个字段在表单模型中配置为 弹出窗口 后、页面的对应字段样式自动转为 <input type="hidden"> ,从而导致不能使用常规的 blur 、keydown 事件触发关联操作。下面是解决思路和成品代码。

用户诉求

主页面配置为弹出窗口的字段、在弹窗完成选择后,主页面可以根据对应字段值的变化,自动触发一些逻辑。(如:在主页面完成弹窗选择后、根据弹窗选择的值自动查询明细数据,并回填主页面的页签)

操作环境

用户软件是 摩尔 MES 、前端页面库是 jQuery、浏览器是微软 Edge 、操作系统是 Windows 11 。

操作过程

首先在摩尔N2的“表单模型”管理界面找到对应表单模型 - 字段的配置项。如下图所示:

用户页面点选对应字段时、配置的弹窗来源如下图所示:

然后我想了下:既然字段中配置的回调函数可以让主页面的字段成功赋值、那么在该回调函数中,每次都主动触发主页面的  <input type="hidden">  ,再在主页面初始化时定义对应隐藏字段的事件绑定,不就成功了嘛。

说干就干,然后配置了下面的代码:

【1】对应字段弹窗选中回调函数

/**
* 【1】摩尔N2 - 表单模型 -对应字段弹窗选中回调函数
*/
function callbackFun(MKEY,val,obj){
		$("#paraMapObj_CD_DEVICE_SN").val(MKEY);
		$("#paraMapObj_CD_DEVICE_SN_SHOW").val(MKEY);
//begin 重点:
try{
console.log("尝试手动触发隐藏的 DEVICE_SN 变化!");
     $("#paraMapObj_CD_DEVICE_SN").val(MKEY).trigger("change");
} catch(e){
//弹窗配置下、需要每次手动触发,记录异常情况
   console.log(e);
}
//end 重点
		if(null!=obj){
            //主页面字段值赋值逻辑,略
			$("#paraMapObj_CD_DEVICE_NAME").val(obj.eq(4).text());
		}
		if($("#paraMapObj_CD_DEVICE_SN").val()==""){
			//主页面字段值清空逻辑,略
		}
		
	}

【2】主页面初始化时绑定

/**
* 【2】主页面初始化时- 绑定隐藏字段的 change 触发后逻辑
*/
$(function(){
          /**
          * add 24-03-22 
          * 【1】要在对应表单模型 - 字段的 “数据选择回调函数体” 中
          *  编写 <input type="hidden"> 的手动触发
          *  对应表单模型 - 字段的 “数据选择回调函数体” 中代码示例如下:
          *  try{ $("#paraMapObj_CD_DEVICE_SN").val(MKEY)
          *      .trigger("change"); }catch(e){ console,log(e); }
          * 【2】然后在主页面的初始化部分绑定  <input type="hidden"> 的
          *  触发逻辑,代码示例如下:
          *  $("input[type=\"hidden\"][id=\"paraMapObj_CD_DEVICE_SN\"]")
          *   .bind("change",function(){
		  *	  
		  *    });
          */
          var tmpSN = "";
          // 此部分绑定隐藏的设备 SN 被触发后的逻辑
		  $("input[type=\"hidden\"][id=\"paraMapObj_CD_DEVICE_SN\"]")
              .bind("change",
                  function(){
			  tmpSN = $("#paraMapObj_CD_DEVICE_SN").val();
			  console.log(">>>>updated device SN is :"+tmpSN);
		  });
          //end add
          //其他略
        }
	    );

原理如下(滑稽):

注意:手动触发  <input type="hidden">  字段时,必须先赋值再触发。赋值的来源,可以重新获取一遍该字段的 value 属性、再用 jQuery 的 val(value) 函数赋值。然后主页面的绑定、需要在页面初始化时使用 jQuery(对应元素).bind("change",function(){ /*此处声明触发之后要做的动作*/ }) ; 的方法。

修改后效果如图:

结论

<input type="hidden">  的隐藏字段不能直接使用 blur、keyup 、keydown 事件。需要在页面其他一个可以操作的元素绑定 onclick / onchange / .. 等事件,该元素每次被操作时、手动触发对应隐藏字段的 change 事件。

(完)

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值