Jquery 如何将其作为函数编写

Jquery 如何将其作为函数编写,jquery,Jquery,我对jquery有点陌生,下面写了一篇切换类型的jquery文章。只是想知道有什么更好的方法来编写它,这样它就可以重用了 它是这样工作的。 基本上,单击其中一个单选金额选项(它们具有“其他”类),然后禁用另一个金额文本框。但单击其他金额收音机,文本框将启用 $("input[type='radio'][name='giftType'][value='Other']").click(function(){ $("input[type='text'][name='otherAmoun

我对jquery有点陌生,下面写了一篇切换类型的jquery文章。只是想知道有什么更好的方法来编写它,这样它就可以重用了

它是这样工作的。 基本上,单击其中一个单选金额选项(它们具有“其他”类),然后禁用另一个金额文本框。但单击其他金额收音机,文本框将启用

$("input[type='radio'][name='giftType'][value='Other']").click(function(){
        $("input[type='text'][name='otherAmount']").removeAttr('disabled');
});
$("input[type='radio'][name='giftType'][class='nOther']").click(function(){
        $("input[type='text'][name='otherAmount']").attr('disabled', 'disabled');
});
显然,有一种更好的方法来编写它,这样我就可以重用它了

类似于函数('值','类'){ ... }


非常感谢您的帮助。

用简单的选择器试试这个

$("input[name='giftType']").click(function(){
    $("input[name='otherAmount']").prop('disabled', ($(this).val() != 'Other'));
});

注意:我正在使用
prop
方法启用/禁用文本框,这是设置元素属性的推荐方法。

使用简单选择器尝试此操作

$("input[name='giftType']").click(function(){
    $("input[name='otherAmount']").prop('disabled', ($(this).val() != 'Other'));
});

注意:我正在使用
prop
方法启用/禁用文本框,这是设置元素属性的推荐方法。

首先是一些常规指针:

  • jQuery属性选择器是速度最慢的,所以尽可能使用标记名、类和ID
  • Enabled不是有效的属性,因为默认情况下任何未禁用的元素都处于启用状态。如果您想在以后的代码中检查启用状态,可以执行$(“输入:不([disabled]))
  • 如果还可以指定一个包含元素,那么可以使下面的内容更有效,因此可以从$(“#myContainerId”).find(“input[type='radio']”)开始
  • 将其包装在函数中并不一定是更好的编写方法。根据网站上代码的复杂程度,有多种方法组织代码以保持其整洁。但一般来说,如果任何一位代码每页被调用不止一次,它应该在一个函数中
  • 但是,我已经将您的代码包装在jquery匿名函数包装器中,这会将代码运行延迟到加载DOM之后(并且还有一个额外的好处(由于所有内容都包装在函数的作用域中),即不向DOM添加任何全局变量
  • f


    首先是一些一般性的提示:

  • jQuery属性选择器是速度最慢的,所以尽可能使用标记名、类和ID
  • Enabled不是有效的属性,因为默认情况下,任何非禁用元素都处于启用状态。如果要在以后的代码中检查启用状态,可以执行$(“输入:not([disabled]))
  • 如果还可以指定一个包含元素,那么可以使下面的内容更有效,因此可以从$(“#myContainerId”).find(“input[type='radio']”)开始
  • 将其包装在函数中并不一定是更好的编写方法。根据网站上的代码复杂程度,有多种方法可以组织代码以保持其整洁。但一般来说,如果任何代码在每页中被调用不止一次,它应该在函数中
  • 但是,我已经将您的代码包装在jquery匿名函数包装器中,这会将代码运行延迟到加载DOM之后(并且还有一个额外的好处(由于所有内容都包装在函数的作用域中),即不向DOM添加任何全局变量
  • f

    那么:

    $('input[name="giftType"]').click(function(){
      $('input[name="otherAmount"]').attr('disabled',($(this).val() != 'Other'))
    });
    
    这将检查名为“giftType”的单选按钮组,如果选择了值为“Other”的单选按钮组,则名为“otherAmount”的文本框将被禁用,否则不会被禁用。下面是一个快速测试

    更新了向后条件检查(=到!=)

    如何:

    $('input[name="giftType"]').click(function(){
      $('input[name="otherAmount"]').attr('disabled',($(this).val() != 'Other'))
    });
    
    这将检查名为“giftType”的单选按钮组,如果选择了值为“Other”的单选按钮组,则名为“otherAmount”的文本框将被禁用,否则不会被禁用。下面是一个快速测试


    更新了向后条件检查(=至!=)

    enabled
    不是一个有效的HTML属性。好的,很高兴知道。我可以去掉已启用的行。
    enabled
    不是一个有效的HTML属性。好的,很高兴知道。我可以去掉已启用的行。效果很好,但它向后运行,所以我进行了调整!=“Other”代替+1以使用正确的报价顺序。但是,请注意,在这种情况下,在jquery>=1.6的版本中,最好使用
    .prop
    而不是
    .attr
    ,但是由于
    attrhook
    ,它可以正常工作。jquery的唯一版本是1.6.0感谢您指出这一点。是的,使用attr是有意的,但是我应该解释一下ther.works很棒,只是它向后工作,所以我做了调整!='Other'而不是+1以使用正确的报价顺序。但是,请注意,最好使用
    .prop
    而不是
    .attr
    在本例中,在jquery>=1.6的版本中,但是由于
    attrhook
    ,它工作正常ode在is 1.6.0中不起作用感谢您指出这一点。是的,使用attr是有意的,但我应该进一步解释。