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

时间:2015-02-13 15:40:56

标签: 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();
}

并称之为:

oncomplete="focusFirst('formCadastro')"

我的表单命名为:" formCadastro",无论如何它都无法工作,但当我改为这个时:

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

它有效。所以这里的问题是如何在选择器内连接我的id?

3 个答案:

答案 0 :(得分:3)

第二个ID之后你错过了一个空格:

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

答案 1 :(得分:1)

您忘了在ID en textarea之间添加空格:更新链接如下:

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

答案 2 :(得分:1)

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

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