jQuery中的选择器

时间:2013-06-12 11:28:28

标签: jquery

您好我试图以动态方式发送ID,这里是代码:

function formsub(val){
    val2 = "form#" + val.toString() + " :input";
    val3 = "form#formmain :input";
    $(val3).each(function () {
        var input = $(this);
        alert($(this).val());
    });
}

如果有人点击表单中的提交按钮,则会调用formsub,但问题是我收到错误:

Uncaught exception: Syntax error , unrecognized expression ''

我尝试使用val3并且它工作正常但是当我使用val2时,它会给我错误,但它们是相同的值。

<form id='formmain' method='post' onsubmit='formsub(this.id)'>
    <label>Name</label>
    <input type='textbox' required />
    <span style='color:red;'>*</span>
    <br/>
    <label>Male</label>
    <input type='radio' required />
    <span style='color:red;'>*</span>
    <br/>
    <label>Female</label>
    <input type='radio' required />
    <span style='color:red;'>*</span>
    <br/>
    <input type='submit' />
    <br/>
</form>

上面的代码适用于表单。

提前致谢

6 个答案:

答案 0 :(得分:3)

正如其他人和我所提到的,冒号的位置在两个字符串中都是不同的,这就是你在一个案例中得到错误的原因。

但是,如果直接使用DOM元素,则可以避免整个字符串连接。

HTML:

<form id='formmain' method='post' onsubmit='formsub(this)'>

JS:

function formsub(ele){
    $(ele).find(':input').each(function () {
        // ...
    });
}

如果使用jQuery来绑定事件处理程序,那就更好了,例如:

$('form').on('submit', formsub);
// or $('#formmain').on('submit', formsub);

在事件处理程序中,this将引用表单元素。详细了解事件处理:http://learn.jquery.com/events/

答案 1 :(得分:2)

替换它:

val2 = "form#" + val.toString() + ": input";  // form#formmain: input

用这个:

val2 = "form#" + val.toString() + " :input";  // form#formmain :input

同样是一个建议,因为 ID 应该是唯一的,您只需使用ID而不是form#ID,例如:

val2 = "#" + val.toString() + " :input";      // #formmain :input

此外,您可以修改js,如:

function formsub(val) {
    val2 = "#" + val.toString() + " :input";
    val3 = "#formmain :input";
    $(val2).each(function () {
        alert(this.value);
    });
}

答案 2 :(得分:2)

尝试使用

val2="form#"+val+" :input";

让我知道这有用吗?

答案 3 :(得分:2)

正如我对代码进行分析,我发现val2和val3之间存在细微差别:

用这个替换你的val2:

val2="form#"+val.toString()+" :input";

因为你已经忘记了空间。

答案 4 :(得分:2)

:input之间没有空格:input

function formsub(val){
    val2="form#" + val.toString() + ":input"; // no space between : and input
    val3="form#formmain :input";
    $(val3).each(function(){
        var input = $(this);alert($(this).val());   
    });
}

答案 5 :(得分:1)

尝试

$("form#" + val.toString() + ":input").each(function(){
 var input = $(this);  
 alert(input.val());
});