【问题标题】:jQuery selector to get form by namejQuery 选择器按名称获取表单
【发布时间】:2012-11-24 18:43:40
【问题描述】:

我有以下 HTML:

<form name="frmSave">...</form>

要知道,我无法修改 HTML 以添加 id 或其他内容。

这就是我试图通过它的名称来获取 form 元素:

var frm = $('form[name="frmSave"]');

console.log(frm);

(但我相信上面的代码会尝试在 form 中获取一个名称为 frmSave 的子元素,这不是我需要的)。

我怎样才能做到这一点,是否可以仅通过 name 并使用选择器来获得 form


更新:

我在我的原始代码中做错了方式(我在选择器中使用了一个空格,也就是“组合器”),而不是在代码 sn-p 中,所以 jQuery 试图获取任何具有所需名称的子元素我在问自己出了什么问题,因为没有返回任何东西。

接受的答案对此给出了更好的解释,因此一点空间可以改变一切 - 下次我会好好睡觉:-)

【问题讨论】:

  • 你确定页面上没有其他 JS 错误阻止它执行吗?检查控制台日志。
  • 我猜它是正确的,但由于某种原因它在控制台打印null,这就是我问的原因,也许其他问题可能是问题,但我会再次检查所有内容。

标签: jquery jquery-selectors


【解决方案1】:

$('form[name="frmSave"]') 是正确的。您提到您认为这会使所有名称为 frmsave 的孩子都包含在表单中;只有在表单和选择器之间有空格或其他组合符时才会发生这种情况,例如:$('form [name="frmSave"]');

$('form[name="frmSave"]') 字面意思是查找所有名称为frmSave的表格,因为不涉及组合子。

【讨论】:

    【解决方案2】:
        // this will give all the forms on the page.
    
        $('form')
    
       // If you know the name of form then.
    
        $('form[name="myFormName"]')
    
      //  If you don't know know the name but the position (starts with 0)
    
        $('form:eq(1)')  // 2nd form will be fetched.
    

    【讨论】:

    • 我在页面上只有一个表单,我使用 $('form') 并且它有效
    • 它会返回所有的表单,并且只有一个表单。
    【解决方案3】:

    您没有组合符(空格、&gt;+...),因此永远不会有孩子参与其中。

    但是,您可以通过使用IDgetElementById 来避免对jQuery 的需求,或者您可以使用旧的getElementsByName("frmSave")[0] 或更旧的document.forms['frmSave']。这里不需要 jQuery。

    【讨论】:

    • document.querySelector("form[name='frmSave']") 也可以,但只能在较新的浏览器中使用。
    • 我知道这是不必要的,但我正在使用其他需要 jQuery 的代码,这就是我使用它的原因,感谢您的解释 btw +1。
    • 没有什么“需要” jQuery,不是真的 ;) 我很高兴地使用手风琴、滑块、工具提示和模式对话框以及手写的 vanilla JS,我觉得这样做更有成就感。
    【解决方案4】:

    为了检测表单是否存在,我正在使用

    if($('form[name="frmSave"]').length > 0) {
        //do something
    }
    

    【讨论】:

      猜你喜欢
      • 2013-09-12
      • 2012-09-07
      • 1970-01-01
      • 2015-12-11
      • 2015-03-28
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多