点击一个Btn其他的btn的颜色变成原来的样子

其实问题很简单,抓住一个重点:(整个过程中其实只有两个btn的颜色和状态在改变,你点这个的时候上一个btn的颜色改变,而其他的btn的颜色不改变,直到你点击它的时候)
<span style="font-size:18px;"> NSArray *arrButton = @[@"资产负债表",@"利润表",@"现金流量表"];
    for(int i = 0; i<3 ; i++)
    {
        UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(i*375.0/3, 0, 375/3, 60)];
        btn.tag = 100+i;
        [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [btn setTitle:arrButton[i] forState:UIControlStateNormal];
        [headerView addSubview:btn];
        if(i == 0)
        {
            _selectIndex = btn.tag;
            [self btnAct:btn];
        }
        [btn addTarget:self action:@selector(btnAct:) forControlEvents:UIControlEventTouchUpInside];</span>
    }
解决办法。用一个全局变量(int型)记住上一个点击的btn的tag值,然后在点击btn的时候用(viewWithTag)取得上个btn,把上个btn的颜色改为正常,而正在点击的btn的颜色改变。
<span style="font-size:18px;">- (void)btnAct:(UIButton *)btn
{
  
    UIButton *lastBtn = (UIButton *)[self viewWithTag:_selectIndex];
    [lastBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    lastBtn.backgroundColor = [UIColor whiteColor];
    
    
    [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    btn.backgroundColor = [UIColor greenColor];
    
    _selectIndex = btn.tag;
}</span>


<think>好的,用户现在想要通过JavaScript查找并点击带有btn-primary类的元素,但遇到了元素无法点击的问题。首先,我需要回顾用户提供的引用内容,看看有没有相关线索。 引用[1]中提到ElementClickInterceptedException,说明元素被其他元素遮挡,导致点击失败。这可能是因为目标元素被另一个元素覆盖,比如弹出层或动态加载的内容。用户可能需要先处理遮挡元素,比如等待其消失或调整点击位置。 引用[2]提到了使用jQuery的addClass方法,但用户的问题是关于点击元素,所以可能关联不大。不过用户之前可能在使用jQuery,所以可以考虑jQuery的解决方案。 接下来,我需要分析用户的问题,思考可能的解决方法。首先,用户可能使用的是原生JavaScript或jQuery。根据用户的问题描述,他们提到“javascript”,但示例中用了jQuery,所以可能需要提供两种方式的解答。 首先,使用原生JavaScript查找元素。因为可能有多个元素带有btn-primary类,需要确定是点击一个还是所有。用户可能只需要点击一个,所以用document.querySelector('.btn-primary')。如果不存在,可能需要等待元素加载,比如使用DOMContentLoaded事件或MutationObserver。 然后,处理元素被遮挡的情况。可能需要检查元素是否可见,是否有覆盖,或者使用JavaScript执行点击而不是模拟用户点击,比如element.click()。 另外,可能涉及动态加载内容,元素尚未出现在DOM中,需要等待。可以使用setTimeout或事件监听,确保元素存在后再操作。 用户的问题还可能涉及事件触发,比如某些页面需要先触发其他事件才能点击按钮,可能需要先执行其他操作。 然后,根据引用[1]中的错误,需要处理遮挡元素。可能需要隐藏遮挡层,或者调整元素的点击位置,比如使用scrollIntoView(),或者使用JavaScript直接触发点击事件,而不是用户模拟点击。 最后,可能需要使用try-catch块来处理异常,确保脚本的健壮性。 总结可能的解决步骤: 1. 确保元素存在且已加载。 2. 确保元素可见且可交互。 3. 处理遮挡元素。 4. 使用JavaScript触发点击事件。 需要将这些步骤详细解释,并提供代码示例,包括原生JS和jQuery两种方式。同时,提醒用户可能的异常处理和调试方法。</think>### JavaScript查找并点击btn-primary类元素的实现方法 #### 一、基础实现方案 1. 原生JavaScript实现 ```javascript // 查找第一个匹配元素 const btn = document.querySelector('.btn-primary'); if (btn) { btn.click(); // 触发点击事件 console.log('元素点击成功'); } else { console.error('未找到.btn-primary元素'); } // 查找所有匹配元素 document.querySelectorAll('.btn-primary').forEach(button => { button.click(); }); ``` 2. jQuery实现 ```javascript // 点击一个匹配元素 $('.btn-primary').first().trigger('click'); // 点击所有匹配元素 $('.btn-primary').trigger('click'); ``` #### 二、处理元素遮挡问题 当出现`ElementClickInterceptedException`时,可以尝试: ```javascript const element = document.querySelector('.btn-primary'); if (element) { element.scrollIntoView({ behavior: 'smooth' }); // 滚动到可视区域 element.style.zIndex = '9999'; // 强制提升层级 element.click(); } ``` #### 三、动态加载内容处理 使用`MutationObserver`监听DOM变化: ```javascript const observer = new MutationObserver(mutations => { const btn = document.querySelector('.btn-primary'); if (btn) { btn.click(); observer.disconnect(); } }); observer.observe(document.body, { childList: true, subtree: true }); ``` #### 四、点击事件调试建议 1. 在控制台验证元素状态 ```javascript console.log('元素可见性:', document.querySelector('.btn-primary').offsetParent !== null); console.log('点击状态:', document.querySelector('.btn-primary').disabled); ``` 2. 强制触发点击(绕过UI检测) ```javascript document.querySelector('.btn-primary').dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true, view: window })); ``` [^1]: 当元素被其他DOM元素遮挡时,直接调用click()可能无法生效,需要先处理遮挡元素或调整元素可点击状态 [^2]: 使用jQuery时应确保DOM加载完成,建议将代码包裹在$(document).ready()中
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值