Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何让用户确认ExtJs中的combobox更改事件?_Javascript_Extjs_Combobox_Callback_Client Side - Fatal编程技术网

Javascript 如何让用户确认ExtJs中的combobox更改事件?

Javascript 如何让用户确认ExtJs中的combobox更改事件?,javascript,extjs,combobox,callback,client-side,Javascript,Extjs,Combobox,Callback,Client Side,我的extjs应用程序中有一个组合,我想显示“你是吗?” 确定吗?“向用户确认窗口,并防止在用户拒绝时更改窗口。” 因为JavaScript的确认框是同步的,所以它可以正常工作。但是使用ExtJS,会显示确认消息,我的其余代码将在用户响应之前执行。这是我的密码: // JavaScript confirm box { xtype: 'combo', ... ... ... listeners: { beforeselect: functio

我的extjs应用程序中有一个组合,我想显示“你是吗?” 确定吗?“向用户确认窗口,并防止在用户拒绝时更改窗口。”

因为JavaScript的确认框是同步的,所以它可以正常工作。但是使用ExtJS,会显示确认消息,我的其余代码将在用户响应之前执行。这是我的密码:

// JavaScript confirm box
{
    xtype: 'combo',
    ...
    ...
    ...
    listeners: {
        beforeselect: function(combo, record, index ) {
            if(confirm('Are you sure ?') == false)
            {
                 return false; // prevent combo from changing
            }
            // else continue
        }
    }
}
// Ext JS message box (to confirm)
{
    xtype: 'combo',
    ...
    ...
    ...
    listeners: {
        beforeselect: function(combo, record, index ) {
            Ext.Msg.show({
                title: 'Warning',
                msg: 'Are You Sure ?',
                buttons: Ext.Msg.YESNO,
                fn: function(btn) {
                    if (btn == 'yes') {
                        // continue and set new value on combo
                    }
                    else if (btn == 'no') {
                        // prevent combo from changing
                    }
                }
            });
        }
    }
}
问题是
Ext.Msg.show
获得了一个回调函数,并且没有等待用户的回答,我们无法阻止组合框的更改


我应该怎么做?

为了取消组合框更改,beforeSelect侦听器需要返回false。我的建议是:

beforeselect: function(combo, record, index ) {
  Ext.Msg.show({
    title: 'Warning',
    msg: 'Are You Sure ?',
    buttons: Ext.Msg.YESNO,
    fn: function(btn) {
      if (btn == 'yes') {

        // Here we have to manually set the combo value
        // since the original select event was cancelled
        combo.setValue( /* whatever value was selected */ );
      }

      else if (btn == 'no') {

        // Don't do anything because the select event was already cancelled
      }
    }
  });

  // Cancel the default action
  return false;
}

ExtJS模式不像本机对话框那样停止脚本的执行,这意味着
beforeSelect
侦听器在用户操作之前返回。此代码的工作方式是立即停止select事件,并显示对话框。当用户选择“是”时,组合上的值将在回调函数中以编程方式设置。

这不起作用,因为在beforeselect中,我们还不知道新选择的值!请思考然后回答您确实知道在选择之前的
中选择的值这是第二个参数(记录在上面的家伙的答案中)。要获取值,可以使用
record.get([组合值字段])为我工作+1!如果您使用的是自定义警报视图,那么它很可能在组合列表折叠之前可见,在这种情况下,请使用
combo.collapse()