0

我有一系列textarea默认情况下应该处于活动状态的 s,但是当包含某个文本时,它应该被禁用。

HTML

<textarea id="my_ta_1">Example 1</textarea>
<textarea id="my_ta_2">Example 2</textarea>
<textarea id="my_ta_3">Example 3</textarea>

jQuery(试图禁用textareawith Example 2inside。)

if (!$('[id*="my_ta_"]').val(Example 2))
 {$(this).attr("disabled","disabled");}

可能吗?

我在附近吗?=)

JSFiddle

我正在使用以下 jQuery 更改为textarea#my_ta_2的文本

$('select').change( function()
 {var text1 = $('select option:selected').val();
  $('#my_ta_2').html(text1);
 }
);

发生这种情况时是否可以再次激活它?

4

5 回答 5

2

您可以使用 afilter()并过滤掉您想要的任何值:

$('textarea[id^="my_ta_"]').filter(function() {
    return this.value.toLowerCase().indexOf('example 2') != -1;
}).prop('disabled', true);

禁用任何包含字符串“示例 2”不区分大小写的文本区域的示例。

小提琴

于 2013-10-23T02:14:09.320 回答
1

每当您在 jQuery 包装集上使用 getter 方法时,它都会返回该集的第一个元素的值...它将忽略该集中的其余元素...

另外,您在哪里设置 textarea 的值而不是让它们进行比较...

您需要使用将函数作为参数的.prop()设置器

$('textarea[id*="my_ta_"]').prop('disabled', function(){
    return $.trim(this.value) == 'Example 2'
})

演示:小提琴

于 2013-10-23T02:14:38.880 回答
0

你可以试试这个(textarea当你输入Example 2任何textareaid开头的时它会禁用my_ta_

$('[id^="my_ta_"]').on('keyup', function(){
    var txt = $(this).val();
    if(txt.match(/Example 2/)){
        $(this).prop('disabled', 1);
    }
});

它甚至会匹配example 2from Some text Example 1 but example 2

示例在这里。

更新:要最初检查文本example 2并使其disabled有其他(投票赞成)答案,请选择您喜欢的一个,但我编写了代码来检查textarea用户何时写入,textarea如果找到example 2(in any case/any where)textarea则将被禁用。

更新: 重新启用disabled textarea使用select

$('[id^="my_ta_"]').on('keyup change', function(){
    var txt = $(this).val();
    if(txt.match(/Example 2/i)){
        $(this).prop('disabled', 1);
    }
    else $(this).prop('disabled', 0);
});

// works on (re-enables) my_ta_2
$('select').on('change', function(){
    var text1 = $(this).val();
    $('#my_ta_2').val(text1).trigger('change');
});

示例在这里。

更新:也许你也可以试试这个(最初检查并禁用并重新启用更改)

$('textarea[id^="my_ta_"]').prop('disabled', function(){
    return $.trim(this.value.toLowerCase()) == 'example 2'
})
.on('change', function(){
    var txt = $(this).val();
    if(txt.match(/example 2/i)){
        $(this).prop('disabled', 1);
    }
    else $(this).prop('disabled', 0);
});

// works on (re-enables) my_ta_2
$('select').on('change', function(){
    var text1 = $(this).val();
    $('#my_ta_2').val(text1).trigger('change');
});

这里的例子。

于 2013-10-23T02:20:05.177 回答
0

您走在正确的轨道上,这是一种方法:

var text_to_match = "Example 2";

$('[id*="my_ta_"]').each(function(){
    var cur_value = $(this).val();
    if(cur_value === text_to_match){
        $(this).attr('disabled', 'disabled');
    }
});

小提琴

于 2013-10-23T02:29:33.003 回答
0
$("textarea").each(function(){
  if($(this).text() !== "Example 2"){
     $(this).attr("disabled","disabled")
  }
});

试试上面的。如果您有其他不想受到影响的 tetarea,只需将指定的 tetarea 包装在 parent 中并找到它们相对于它们的 parent

于 2013-10-23T02:15:49.360 回答