我目前正在使用jQuery编写一些表单验证并遇到以下问题..
我以这样一种方式给我的输入ID:当发布数据时,我有一个像这样工作的数组..
<input type="text" id="user[name]" />
<input type="text" id="user[email]" />
这意味着当数据发布到我的脚本时,我将有一个“用户”arrau可用,所以我可以做$user["name"]
之类的事情但是,当我尝试用jquery选择输入时... var name = $("#user[name]")
它不会工作。但如果我只是将输入的ID作为“用户名”,则var name = $("#username")
将起作用。
我假设它与jquery中的CSS选择器有关,因为它试图访问ID为name的用户对象?就像$("input[username]")
选择id为username的输入一样。
关于如何解决这个问题的任何想法?它会在所有浏览器中有效吗?
答案 0 :(得分:1)
表单元素的id
值不是传递给服务器的值,它仅由文档DOM和脚本语言在内部使用。它是name
传递的。
您的表单元素需要更改为以下内容:
<input type="text" id="username" name="user[name]" />
<input type="text" id="useremail" name="user[email]" />
HTML 4 specification解决了元素的正确命名问题:
ID和NAME令牌必须以a开头 信([A-Za-z]),可以遵循 任意数量的字母,数字 ([0-9]),连字符(“ - ”),下划线 (“_”),冒号(“:”)和句号 ( “”)。
在name
属性中使用方括号是将数组格式的数据传递到服务器端脚本语言的常用技术,但在id
中使用它们肯定会混淆JQuery。
答案 1 :(得分:0)
我并不完全惊讶选择器不起作用,因为根据HTML specification您的ID无效:
ID和NAME令牌必须以a开头 信([A-Za-z]),可以遵循 任意数量的字母,数字 ([0-9]),连字符(“ - ”),下划线 (“_”),冒号(“:”)和句号 ( “”)。
PHP手册有一个关于pass form elements as an array到服务器的正确方法的教程,使用name
属性而不是ID:
<input name="MyArray[keyOne]" />
<input name="MyArray[keyTwo]" />
<input name="MyOtherArray[]" />
<input name="MyOtherArray[]" />
答案 2 :(得分:0)
尝试以下方法之一:
$("[id='user[name]']")
$("#user\\[name\\]")
$("#user\\005Bname\\005D")
答案 3 :(得分:0)
首先要知道name属性是发布的内容而不是id。
现在问题
使用jQuery访问<input type="text" id="user[name]" />
您需要像这样
var name = $("input[id='user[name]']");