Javascript JQuery以同一类的多个元素中的一个元素为目标

Javascript JQuery以同一类的多个元素中的一个元素为目标,javascript,jquery,html,css,Javascript,Jquery,Html,Css,如何将元素与具有相同类或其他属性的多个元素分开作为目标。我不能在每个元素上添加不同的类,所以我需要在处理每个元素时将其作为目标。 到目前为止,我已经尝试过这个方法,但它是针对所有元素的输入:文本,因为我的错误条件是针对每个单独工作的元素 var selector = $('input:radio').prop("checked", true); var element = $ ('input:text'); $(selector).on('change', function( event )

如何将元素与具有相同类或其他属性的多个元素分开作为目标。我不能在每个元素上添加不同的类,所以我需要在处理每个元素时将其作为目标。 到目前为止,我已经尝试过这个方法,但它是针对所有元素的输入:文本,因为我的错误条件是针对每个单独工作的元素

var selector = $('input:radio').prop("checked", true);
var element = $ ('input:text');

$(selector).on('change', function( event ) {
if(this){
    $(element).prop('disabled', true);
     alert('disable only this element when radio is selected');
}
else{ 
    alert('others input:text not disabled');
    $('input:text').prop("disabled", false);
}
})
为什么不简化呢

为什么不简化呢


通过使用DOM导航方法,您可以非常轻松地做到这一点。只要用这个:

var selector = $('input:radio').prop("checked", true);
var element = $ ('input:text');

$(selector).on('change', function( event ) {
    var el = $(this).closest('.input-group').find('input:text');
    element.prop('disabled', function(){
        return !el.is(this);
    })
});
小提琴:

对于动态输入,您需要使用事件委派阅读更多:


通过使用DOM导航方法,您可以非常轻松地做到这一点。只要用这个:

var selector = $('input:radio').prop("checked", true);
var element = $ ('input:text');

$(selector).on('change', function( event ) {
    var el = $(this).closest('.input-group').find('input:text');
    element.prop('disabled', function(){
        return !el.is(this);
    })
});
小提琴:

对于动态输入,您需要使用事件委派阅读更多:


我不太明白您到底想做什么,但是您可以使用$this来定位触发事件的元素,而不是尝试使用选择器

我想这就是你想要的:

$(selector).on('change', function( event ) {
    $("input:text").prop("disabled", true);
    $(this).parent().siblings("input:text").prop("disabled", false);
})

它将禁用所有输入:文本,然后启用选中其单选按钮的元素。

我不清楚您到底想做什么,但您可以使用$this来定位触发事件的元素,而不是尝试使用选择器

我想这就是你想要的:

$(selector).on('change', function( event ) {
    $("input:text").prop("disabled", true);
    $(this).parent().siblings("input:text").prop("disabled", false);
})
它禁用所有输入:文本,然后启用其单选按钮被选中的文本。

尝试以下操作:

$(selector).on('change', function( event ) {
    $('input:text').prop("disabled", false);
    $(this).closest('.input-group').find(element).prop('disabled', true);

})
试试这个:

$(selector).on('change', function( event ) {
    $('input:text').prop("disabled", false);
    $(this).closest('.input-group').find(element).prop('disabled', true);

})

正如其他人所说,并不完全清楚你想做什么,或者你的问题有多笼统。如果与选择器匹配的元素具有完全相同的属性(包括类),则您可能需要基于它们嵌入的上下文,或者作为最后一个资源,您可以基于这些元素的顺序

上下文:如果您正在寻找p.many_like_me,并且您知道要匹配的元素在parent_id中,那么您只需将选择器优化为parent_id p.many_like_me

顺序:如果您知道要在DOM上查找与选择器匹配的第三个元素,可以使用get来选择它:$p.many_like_me.get2 get采用基于零的索引


如果您需要根据附近或某种相关元素触发的事件来选择它们,那么这里给出的其他一些答案就可以了。

正如其他人所说,您想做什么,或者您的问题有多笼统还不清楚。如果与选择器匹配的元素具有完全相同的属性(包括类),则您可能需要基于它们嵌入的上下文,或者作为最后一个资源,您可以基于这些元素的顺序

上下文:如果您正在寻找p.many_like_me,并且您知道要匹配的元素在parent_id中,那么您只需将选择器优化为parent_id p.many_like_me

顺序:如果您知道要在DOM上查找与选择器匹配的第三个元素,可以使用get来选择它:$p.many_like_me.get2 get采用基于零的索引



如果您需要根据附近或相关元素触发的事件来选择它们,那么此处给出的其他一些答案是可以的。

您正在var选择器中设置checked属性,而不是选择已选中的属性。Try var selector=$输入:收音机:选中:;你说你不能添加类。将ID添加到以后要挑选的元素中如何?@Bobby很遗憾,元素是动态创建的,我没有访问HTML的权限,ID被wicket:ID占用。您在var选择器中设置checked属性,而不是选择已选中的属性。Try var selector=$输入:收音机:选中:;你说你不能添加类。将ID添加到以后要挑选的元素中如何?@Bobby很遗憾,元素是动态创建的,我没有访问HTML的权限,ID被wicket:ID占用。实际上这是正确答案,需要启用选定的元素并禁用其他元素。ty.@mcmwhfy您的问题是以另一种方式陈述的:选择radio时仅禁用此元素。我原来的答案和这个答案的结果一样。您只需要还原返回值。实际上这是正确的答案,需要启用所选元素并禁用其他元素。ty.@mcmwhfy您的问题是以另一种方式陈述的:选择radio时仅禁用此元素。我原来的答案和这个答案的结果一样。你只需要还原返回值。是的,第一次你的答案是正确的,之后你更新了,或者我不知道发生了什么。请编辑你的答案,也许将来这个问题会帮助其他人,并且需要有正确的答案,泰。@mcmwhfy你的问题有点不清楚,但是在回答之后,我重读了你的问题,看看你是否希望它是另一种方式。最后,我想如果你理解了这个片段,你将不会有问题逆转结果。我已经编辑了答案,
但请清楚地告诉我你真正需要什么。选中的收音机有一个启用的输入,或者选中的收音机有一个禁用的输入?也许我的问题有点不清楚,但这是正确的答案,选中的收音机必须有输入:文本启用和其他禁用。如果我可以问你另一个问题,如果DOM被修改了,如何重新启动这个函数,以便在每次加载带有这个组件的另一个部分时都能工作。ty提前。是的,第一次你的答案是正确的,之后你已经更新了,或者我不知道发生了什么。请编辑你的答案,也许将来这个问题会帮助别人,需要有正确的答案,ty。@mcmwhfy你的问题有点不清楚,但是在回答之后,我重读了你的问题,看看你是否希望它是另一种方式。最后,我想,如果你理解了这个片段,你就可以把结果颠倒过来。我已经编辑了答案,但请清楚地告诉我你真正需要什么。选中的收音机有一个启用的输入,或者选中的收音机有一个禁用的输入?也许我的问题有点不清楚,但这是正确的答案,选中的收音机必须有输入:文本启用和其他禁用。如果我可以问你另一个问题,如果DOM被修改了,如何重新启动这个函数,以便在每次加载带有这个组件的另一个部分时都能工作。提前打电话。