如何防止在Ext Js Tree中检查更改时的itemclick事件

时间:2013-04-19 09:50:29

标签: extjs tree click treeview

我在Ext.tree.Panel中添加了两个侦听器'check change'和'item click'。但我注意到了,  当检查发生变化时,它也会触发项目点击事件。我希望阻止此项目点击事件。

    listeners : {
        checkchange: function(node, checked, eOpts){
            alert('this is check change');
        },
        itemclick : function(obj, record, item, index, e, eOpts){
            alert('this is item click');
        }
    }

这是Ext树中的侦听器。在检查更改时,我希望只有“这是检查更改”此警报。怎么可能?

4 个答案:

答案 0 :(得分:1)

您可以使用事件getTarget方法来检查复选框的DOM。完整的解决方案如下:

onItemClick: function( self, record, item, index, eventObj, eOpts ) {
    var colIdx = eventObj.getTarget('.x-grid-cell').cellIndex;

    if (colIdx===0) { // Apply item event click to the first column only
        var node=self.getTreeStore().getNodeById(record.internalId);

        if (!eventObj.getTarget('.x-tree-checkbox',1,true)) {
            record.set('checked',!record.get('checked'));               
            this.fireEvent('checkchange', node, record.get('checked'));
        }
    } 
}

答案 1 :(得分:1)

Lame解决方案! 我能够将脚本限制为'itemclick'。 适用于ExtJs 5.1.1,可能适用于所有版本,其中css复选框类名称为'x-tree-checkbox'

if (username_exists($user)){

echo 'Username already exists. Please wait while we redirect you back to the form';
    die("<meta http-equiv=\"refresh\" content=\"5;url=".$_SERVER['HTTP_REFERER']."\"/>");


}

if ( !username_exists( $user )  && !email_exists( $email ) ) {
   $user_id = wp_create_user( $user, $pass, $email );
   if( !is_wp_error($user_id) ) {
       //user has been created
       $user = new WP_User( $user_id );
       $user->set_role( 'subscriber' );

       wp_mail( $to, $email_subject, $message, $headers);


       //Redirect
       wp_redirect( 'http://www.dev.smithhonig.com/thank-you' );
       exit;
   } else {
       //$user_id is a WP_Error object. Manage the error
   }
}


}
add_action('init','create_account');

答案 2 :(得分:0)

如果您单击复选框以更改其值,则itemclick事件将始终在checkchange事件之前触发。如果你不希望在itemclick事件上发生任何事情,只需不要定义它(删除监听器)。

答案 3 :(得分:0)

您是否尝试过实施'beforeitemclick'活动?单击该项时会触发它,在此处理程序中,您可以实现checkchange。