【问题标题】:Change .prev() button to disabled on click of another button单击另一个按钮时将 .prev() 按钮更改为禁用
【发布时间】:2014-01-17 21:00:11
【问题描述】:

我有两个按钮,我需要一个保持禁用状态,直到另一个按钮处于活动状态。然后,如果再次单击/切换第一个按钮,我需要使相同的按钮变为非活动状态并返回上一课。我只能访问 jQuery 1.7.2:

 <button class="primaryClass" value="primary"></button>
 <button class="linkClass" value="link"></button>

到目前为止,我尝试了这个,但它似乎不起作用:

$('.linkClass').on('click touchend',function() {
    if($(this).hasClass('linkClass')) {
        $(this).prev('.primaryClass').addClass('disabled');
        e.preventDefault;

    }
    if($(this).hasClass('linkClass-active')) {
        $(this).prev('.primaryClass').removeClass('disabled');

});

因此,基本上,用户单击带有 linkClass 的按钮,带有主类的按钮变为启用,因为禁用的类已被删除。如果用户再次单击它,则 primaryClass 按钮再次变为禁用状态。任何想法我做错了什么?

【问题讨论】:

  • 不明白,你选择.linkClass,看看有没有.... .linkClass???

标签: javascript jquery button click


【解决方案1】:

您的问题相当模糊,请尝试制作小提琴。据我所知,您应该设置.prop("disabled", true); 以禁用按钮。如果您没有 css .disabled 类,您将看不到它,您应该始终使用内置功能。

【讨论】:

  • 抱歉我懒得提琴了。但是是的,基本上是切换禁用属性。谢谢。
【解决方案2】:

您可以使用disabled 属性禁用按钮,而不是添加类。这将防止单击按钮触发任何事件处理程序。

 $('.linkClass').on('click touchend',function() {
    var primary = $("button.primaryClass");
    primary.prop("disabled", !primary.is(":disabled"));
});

JS 小提琴: http://jsfiddle.net/6SNQS/2/

【讨论】:

  • @isaacweathers 很高兴我能帮上忙。如果您还有其他问题,请告诉我。
【解决方案3】:

使用切换类

http://api.jquery.com/toggleclass/

$('.linkClass').on('click touchend',function() {

 $(this).prev('.primaryClass').toggleClass('disabled');
    e.preventDefault;
});

'linkClass-active' 的部分我不明白,所以我把它省略了。

如果您还想切换禁用的属性,请使用:

 $('.linkClass').on('click touchend',function() {
     var $target =  $(this).prev('.primaryClass');
     $target.toggleClass('disabled');
     $target[0].disabled = !$target[0].disabled;
     e.preventDefault;
});

小提琴:http://jsfiddle.net/Yyk2G/

顺便问一下,你为什么要设置值?它不是一个输入,它是一个按钮标签。

【讨论】:

  • 后端有很多花里胡哨的东西...该值用作绑定逻辑。
  • 这是有道理的。我通常使用前缀 data-,如 data-value。这有一个小的好处是有效的 html(不是那么重要)和方便包含在 jQuerry .data() ejohn.org/blog/html-5-data-attributes
【解决方案4】:

你的意思是这样DEMO

html

   <button class="primaryClass" disabled="disabled" value="primary">Bye</button>
   <button class="linkClass" value="link">Hi</button>

js

$('.linkClass').on('click touchend',function() {
 $(this).prev().prop('disabled', function(idx, oldAttr) {
        return !oldAttr;
    });    
});

jQuery attr() 接受回调。所以你可以利用它来发挥你的优势。

【讨论】:

  • 是的。多谢你们。这三个似乎都是我需要的。现在看看哪一个在这种环境下工作。
  • @Alex Shilman “要检索和更改 DOM 属性,例如表单元素的选中、选择或禁用状态,请使用 .prop() 方法。”来自api.jquery.com/attr
  • @AlexShilman 没问题,attr 仍然适用于属性,但是如果您尝试在属性上使用 attr(),您可能会遇到某些浏览器的问题。
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-20
  • 1970-01-01
  • 2019-02-10
  • 1970-01-01
相关资源
最近更新 更多