У меня есть серия textarea
которая по умолчанию должна быть активной, но при содержании определенного текста она должна быть отключена.
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 (попытка отключить textarea
с Example 2
внутри.)
if (!$('[id*="my_ta_"]').val(Example 2))
{$(this).attr("disabled","disabled");}
Является ли это возможным?
И я где-нибудь рядом? знак равно
Я использую следующий jQuery для изменения текста textarea
# my_ta_2
$('select').change( function()
{var text1 = $('select option:selected').val();
$('#my_ta_2').html(text1);
}
);
Можно ли активировать его снова, когда это произойдет?
Вы можете попробовать это (он отключит textarea
при my_ta_
Example 2
в любом textarea
которое имеет id
начинающийся с my_ta_
)
$('[id^="my_ta_"]').on('keyup', function(){
var txt = $(this).val();
if(txt.match(/Example 2/)){
$(this).prop('disabled', 1);
}
});
Это будет даже соответствовать example 2
из Some text Example 1 but example 2
.
Обновление. Чтобы изначально проверить текстовый example 2
и disabled
его, есть другие (опрошенные) ответы, выберите тот, который вам нравится, но я написал код для проверки textarea
когда пользователь пишет в textarea
и если он находит example 2(in any case/any where)
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');
});
Вы можете использовать filter()
и отфильтровывать любое значение, которое вам нужно:
$('textarea[id^="my_ta_"]').filter(function() {
return this.value.toLowerCase().indexOf('example 2') != -1;
}).prop('disabled', true);
пример, запрещающий любое текстовое поле, содержащее строку "пример 2" без учета регистра.
^
Всякий раз, когда вы используете метод getter в наборе оболочки jQuery, он возвращает значение первого элемента набора... он будет игнорировать остальные элементы в наборе...
Также вы устанавливаете значение textarea вместо того, чтобы их сравнивать...
Вам нужно использовать set.prop(), который принимает функцию как параметр
$('textarea[id*="my_ta_"]').prop('disabled', function(){
return $.trim(this.value) == 'Example 2'
})
Демо: скрипка
Вы были на правильном пути, вот один из способов сделать это:
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');
}
});
$("textarea").each(function(){
if($(this).text() !== "Example 2"){
$(this).attr("disabled","disabled")
}
});
Попробуйте вышесказанное. Если у вас есть дополнительные тетары, на которые вы не хотите влиять, просто оберните указанные в родительском элементе и найдите их относительно их родительского