【问题标题】:Tricky little jquery selector one : loop over all inputs, and exclude only non-checked radio buttons棘手的小 jquery 选择器一:遍历所有输入,并仅排除未选中的单选按钮
【发布时间】:2012-05-23 03:44:43
【问题描述】:

这里是交易:为了构建一系列正确的参数,我试图遍历包含在 ajax 构建表单中的所有输入; 这里的代码还没有完成,但我想你会明白的:

$("#formulaireUploadFichier").live('submit',function(e){
    var fm = $(this);
    var fld = [];
    $('input',fm).not('[type=submit]').each(function(){
        if ($(this"[type=radio]:checked"||$(this).not("[type=radio]"))
        var name= $(this).attr("name");
        var val= $(this).val();
        fld.push(name+'='+val);
    });
    //construct url (note : should really be encoded!)...
    var url = fm.attr('action')+'?'+fld.join('&');
    //open shadowbox...
    Shadowbox.open({
        player:"html",
        content:url,
        width:800,
        height:800
    });
    //prevent form submission...
    e.preventDefault();
}); 

第 5 行是最痒的部分,我正在尝试为 JQuery 编写一个正确的选择器以传递未选中/选中的单选按钮。 我知道我离它并不远,但我搞砸了,所以任何帮助清除此帮助的帮助将不胜感激。

【问题讨论】:

    标签: jquery jquery-selectors radio-button


    【解决方案1】:

    由于您已经在输入元素的循环中,因此无需开始另一个。只需在每个项目上测试适当的过滤器即可。

    if($(this).is(":radio:checked,:not(:radio)")) {
            var name= $(this).attr("name");
            var val= $(this).val();
            fld.push(name+'='+val);
    }
    

    jQuery 的 is() 函数可让您将元素与作为参数传递的选择器进行比较。

    【讨论】:

    • 我刚开始使用 jQuery,就像 2 天前一样,所以我可能错了,但我相信这会选择所有未选中的单选按钮。我认为用户打算选择所有输入,除了未选中的单选按钮。
    • 用户已经在迭代输入。 jQuery 的is() 函数可以让您测试一个元素以查看它是否与给定的选择器匹配。它返回truefalse
    • 啊好吧,现在看我明白了。选择选中的单选按钮,然后不选择单选按钮。
    • 是的,它会为所有“未检查的收音机”或“非收音机”返回“真”。
    • 正确,感谢您的提示。我想我只需要稍微研究一下选择器,因为当您查看它时,语法非常简单。
    【解决方案2】:

    你在$(this"[type附近搞砸了

    编辑:

    var inps=$('input');
    var whatYouWant = inps.filter('[type!=radio]').add(inps.filter('[type=radio]:checked'));
    

    这样它应该做你想做的事

    【讨论】:

    • 这不起作用。它返回未检查的无线电集合。那(根据他的例子)就是他想要的。
    • 好的,现在我知道哪里不好了,但下次不要用“这就是他想要的”来结束你的负面 cmets ;) 我正在编辑中修复答案
    • 糟糕。意思是说这不是他想要的。感谢您的指正。希望我不是太消极。给你一个 +1 让我直截了当!
    【解决方案3】:

    你究竟想选择什么:

    • 刚刚选中单选按钮,或
    • 所有选中的单选按钮和复选框?

    刚刚选中的单选按钮的代码:

    if($(this).is(":radio:checked")) {
    

    所有选中输入的代码(复选框和单选按钮):

    if($(this).is(":radio:checked, :not(:radio):checked")) {
    

    我希望这就是你所追求的。

    【讨论】:

      【解决方案4】:

      您期望的结果是什么?

          $('input',fm).not('[type=submit]').each(function(){
          if ($(this"[type=radio]:checked"||$(this).not("[type=radio]"))
          var name= $(this).attr("name");
          var val= $(this).val();
          fld.push(name+'='+val);
           });
      

      我在这里看到的是,无论是否选中了收音机,您都希望触发以下条件。您想念 {} 来包围代码,您所做的只是在满足条件时设置 var 名称。你的意思是让它运行所有的代码?像这样?

          $('input',fm).not('[type=submit]').each(function(){
      if ($(this"[type=radio]:checked"||$(this).not("[type=radio]")){
      var name= $(this).attr("name");
      var val= $(this).val();
      fld.push(name+'='+val);
      }
      
       });
      

      【讨论】:

      • 有趣的是,这已被贬低,但代码显然不会根据原始海报发布的内容设置该名称变量。
      • 这是针对谁的?您评论了自己的答案。
      【解决方案5】:

      我建议将if ($(this"[type=radio]:checked"||$(this).not("[type=radio]")) 替换为if($(this).attr('type') !== 'radio' || $(this).val()=='on')

      【讨论】:

        猜你喜欢
        • 2015-10-04
        • 1970-01-01
        • 1970-01-01
        • 2020-12-23
        • 1970-01-01
        • 2021-12-23
        • 1970-01-01
        • 2018-09-11
        • 1970-01-01
        相关资源
        最近更新 更多