Как отключить поле ввода, основываясь на отображаемом тексте пользователя?
У меня есть этот фрагмент кода, который работает:
var oldInput = document.getElementsByName ("prio");
oldInput[0].setAttribute ("disabled", "disabled");
И это соответствующий HTML- код целевой страницы (исправлено):
<div id="content">
<p>(CONTENT)</p>
<form>
<p>Priority: <input name="prio" type="text" value="285"></p>
<p>Success: <input name="succ" type="text" value="6"></p>
</form>
</div>
<table border="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="user">
<a href="#" class="nav" title="Logout John">Logout</a>
(User: John)
</td>
</tr>
</tbody>
</table>
Смотрите это на http://jsfiddle.net/Kc3BB/3/.
У меня есть 1 точка доступа для многих пользователей. но я хочу, чтобы 5 пользователей могли изменить prio
значение. Вы можете видеть, что имя пользователя находится в нижнем колонтитуле.
Возможно ли сделать это в javascript с кодом выше для Firefox 2.x и без jQuery?
Пример:
if USER (from footer) == JOHN || LUKE || JEFF || MAX || ANDY
do nothing
else
disable PRIO BOX (from content)
3 ответа
Это должно работать в Firefox 2.0:
//--- Make sure this list of names is all uppercase.
var usersWhoCanSetPriority = ['JOHN', 'LUKE', 'JEFF', 'MAX', 'ANDY'];
var bDisablePrio = true;
var tdNodes = document.getElementsByTagName ("TD");
for (var J = tdNodes.length - 1; J >= 0; --J) {
var tdNode = tdNodes[J];
if (tdNode.className == "user") {
var userName = tdNode.textContent.replace (
/^(?:.|\n|\r)+\(User:\s+([^)]+)\)(?:.|\n|\r)+$/i, "$1"
).toUpperCase ();
if (usersWhoCanSetPriority.indexOf (userName) > -1) {
bDisablePrio = false;
}
}
}
if (bDisablePrio) {
var oldInput = document.getElementsByName ("prio");
oldInput[0].setAttribute ("disabled", "disabled");
}
Смотрите обновленную скрипку.
Попробуй это:
var tds = document.getElementsByTagName("TD",
footerText = tds[tds - 1].textContent,
user = footerText.match(/\(User: ([^\)]*\))/)[1].toUpperCase();
if (" JOHN LUKE JEFF MAX ANDY ".indexOf(" " + user + " ") !== -1) {
// Do stuff
} else {
// Do else stuff
var oldInput = document.getElementsByName("prio");
oldInput[0].setAttribute("disabled", "disabled");
}
Примечание: ваш псевдокод означает полную противоположность тому, что вы сказали словами. Исправьте приведенный выше код к вашим реальным желаниям.
Изменить: я не мог вспомнить, если Firefox 2 поддерживает indexOf
на массивах. Оно делает. Таким образом, вы можете использовать эту строку вместо:
if (["JOHN", "LUKE", "JEFF", "MAX", "ANDY"].indexOf(user) !== -1) {
Редактировать 2: Я только что видел ваши изменения и соответственно изменил ответ. Я надеюсь, что ваш HTML-фрагмент на самом деле отражает исходный код страницы, иначе мы обнаружим, что элементам нижнего колонтитула потребуется другой метод
var allowed_users = ['John', 'Luke', 'Jeff', 'Max', 'Andy'];
var user = /\(User: ([^)]*)\)/.exec(document.getElementById('footer').textContent)[1];
if(allowed_users.indexOf(user) === -1) // user not in allowed_users array, disable priority
{
var oldInput = document.getElementsByName('prio')[0];
oldInput.setAttribute('disabled', 'disabled');
}