Javascript 这个Jquery选择器代码有什么问题?

Javascript 这个Jquery选择器代码有什么问题?,javascript,jquery,Javascript,Jquery,我想在调用函数时集中窗体中的第一个有效元素,因此我编写了以下代码: function focusFirst(id) { $("#" + id + " input:visible:enabled:not([readonly]), #" + id + "textarea:visible:enabled:not([readonly]), #" + id + " select:visible:enabled:not([readonly])").first().focus(); } 并这样称呼它

我想在调用函数时集中窗体中的第一个有效元素,因此我编写了以下代码:

function focusFirst(id) {
    $("#" + id + " input:visible:enabled:not([readonly]), #" + id + "textarea:visible:enabled:not([readonly]), #" + id + " select:visible:enabled:not([readonly])").first().focus();
}
并这样称呼它:

oncomplete="focusFirst('formCadastro')"
我的表单名为“FormCadstro”,无论如何它都不会工作,但当我更改为此时:

function focusFirstFormCadastro() {
    $("#formCadastro input:visible:enabled:not([readonly]), #formCadastro textarea:visible:enabled:not([readonly]), #formCadastro select:visible:enabled:not([readonly])").first().focus();
}

它起作用了。因此,这里的问题是如何在选择器中连接我的id?

在第二个id之后缺少一个空格:

function focusFirst(id) {
    $("#" + id + " input:visible:enabled:not([readonly]), #" + id + " textarea:visible:enabled:not([readonly]), #" + id + " select:visible:enabled:not([readonly])").first().focus();
}

您忘记在ID en textarea:Update链接之间添加空格,如下所示:

$("#" + id + " input:visible:enabled:not([readonly]), #" + id + " textarea:visible:enabled:not([readonly]), #" + id + " select:visible:enabled:not([readonly])").first().focus();

为了便于阅读,您应该使用相关的横向/过滤方法:

function focusFirst(id) {
    $("#" + id).find('input, textarea').filter(':visible:enabled:not([readonly])').first().focus();
}

哦,哈哈,你打败了我:(考虑使用
.find()
来提高可读性,甚至可以传递元素(jq或不是)而不是字符串ID