// 熊猫
var res =
"palette { orientation:'row', \
    A: DropDownList { properties:{items:['A','B','C','D','E','F','G']} }, \
    B: DropDownList { properties:{items:['A','B','C','D','E','F','G']} }, \
}";

var win = new Window (res);
win.show();
var L = win.A; L.selection = 0;
var R = win.B; R.selection = 1;


function A() { return 0 }

function B() { return 0 }

//========================错误的实现==========================
L.onChange = function () {var i = this.selection.index; R.selection = B(); this.selection = i}

R.onChange = function () {var i = this.selection.index;  L.selection = A(); this.selection = i}
//============================================================

//目前的问题:L绑定了监听,R绑定了监听,L值发生改变会使R的值发生改变,R值的改变又会触发R的监听,导致L的值被改变,反之亦然。
//期望的结果:L发生改变时,R的值发生改变,但不触发R的监听(或不执行相应的处理程序)。R发生改变时,L的值发生改变,但不触发R的监听(或不执行相应的处理程序)。


/*=======================一种解决方案=========================
var change = false;

function pass() { change ? change = false : change = true; }

L.onChange = function () { pass(); if(change) R.selection = B(); pass();}

R.onChange = function () { pass(); if(change) L.selection = A(); pass();}
//===========================================================*/

 

您的电子邮箱地址不会被公开。 必填项已用*标注

请下载到本地观看!因为pdf是用的阿里云盘预览,可能部分字体加载不了。

请安装油猴脚本,并下载月离的万事屋脚本。详情请查看菜单 导航 - 用户指引

请在右上角三个点 - 下载管理 - 找到刚才的文件,选择允许下载。 或者换个浏览器