在.on() - 方法中简化同一父元素的多个子元素的选择器

时间:2015-08-13 13:14:36

标签: javascript jquery jquery-selectors

我使用此代码来跟踪表单上是否有任何更改:

$(document).on('input', '.track', function() {
    var form = $(this);
});

由于这不会触发复选框单选按钮文件输入,我还使用此代码段来处理跟踪中的这些元素形式:

$(document).on('change', '.track [type="checkbox"], .track [type="radio"], .track [type="file"]', function() {
    var form = $(this).closest('form');
});

我现在的问题是:如何简化此选择器?

.track [type="checkbox"], .track [type="radio"], .track [type="file"]

表单是动态来来去去所以我必须使用.on() - 方法,而不能预先选择所有必需元素,例如$('.track').find('[type="checkbox"], …');

3 个答案:

答案 0 :(得分:1)

使用event.target

将您的方法更改为不依赖于选择器和回调本身内的句柄
$(document).on('change', '.track', function(event) {
    if(['file', 'checkbox', 'radio'].indexOf($(event.target).attr('type')) > -1){
        var form = $(this).closest('form');
    }
});

答案 1 :(得分:0)

一种简化是使用:checkbox:radio:file

'.track :checkbox, .track :radio, .track :file'

如果您不想重复自己,可以使用:not做一些小技巧:

'.track :not(:not(:checkbox, :radio, :file))'

然后你开始进入“丑陋”的领域。

答案 2 :(得分:0)

试试这个

var authCode = result.auth;

var options = { auth: authCode,
                type: "item",
                id: podioId,
                hook: false,
                body:{value:comment}}

podio.commentsAddCommentToObject(options,function(err,result){
    if(err) throw err;
    console.log(util.inspect(result, { showHidden: true, depth: null }))
});