Базовая справка по JS + WebDev - PullRequest
1 голос
/ 20 июля 2010

У меня есть небольшая проблема. У меня семь <select> х. Идти слева направо, считая вверх.

<select id="sel_1" onchange="evalonsubmit('sel_1',1);">
<select id="sel_2" onchange="evalonsubmit('sel_2',2);">

Таким образом, от 1 до 7.

Логика проста. При нажатии проверьте, если значение равно -1, если оно отключить все справа и установите его на -1. если это не -1, тогда включите право на нажатую (так сказать, +1)

И это код:

function evalonsubmit(ID, n)
{
    var ElementID = document.getElementById(ID);
    if(ElementID.value = -1) {
        for (var i = n + 1; i <= 7; i++){
            var newID = "sel_" + i;
            var newValue = document.getElementById();
            newValue.disable = true;
            newValue.value = -1
        }
    } else {
        var newID = "sel_"+(n+1)
        var newValue = document.getElementById();
        newValue.disable = false;
    }
}

Может ли кто-нибудь добрый хакер JS помочь мне?

Ответы [ 4 ]

1 голос
/ 20 июля 2010

Я просто исправил несколько простых ошибок в вашем коде ..

function evalonsubmit(ID, n)
{
    var ElementID = document.getElementById(ID);
    if (ElementID.value == -1){
        for (var i=n+1; i <= 7; i++){
            var newID = "sel_" + i;
            var newValue = document.getElementById(newID);
            newValue.disable = true;
            newValue.value = -1
        }
    } else {
        var newID = "sel_"+(n+1)
        var newValue = document.getElementById(newID);
        newValue.disable = false;
    }
}
1 голос
/ 20 июля 2010

Не совсем уверен, что вы хотите, но, вероятно, это должно быть:

if (ElementID.value == -1){
//                   ^---  two = , otherwise you assign the value

и

var newID = "sel_" + i;
var newValue = document.getElementById(newID);
//                     pass parameter ---^

То же самое в else ветви.1010 * Кроме того, я бы дал вашим переменным более значимые имена.Например, ElementID позволяет предположить, что значение является идентификатором.Но это не так.Это элемент DOM.То же самое для newValue.

0 голосов
/ 20 июля 2010

Почему бы не сделать это:

HTML:

<div class="wrapper">
    <select onchange="evalonsubmit(this);" />

    <select onchange="evalonsubmit(this);" />
    <select onchange="evalonsubmit(this);" />
</div>

JS:

function nextElement(current)
{
    do
        current = current.nextSibling;
    while (current && current.nodeType != 1);

    return current;
}

function evalonsubmit(elem)
{
    if(elem.value == -1)
        while(elem = nextElement(elem)) {
            elem.disabled = true;
            elem.value = -1
        }
    else if(elem = nextElement(elem))
        elem.disabled = false;
}

Это устраняет необходимость в id s на <select>элементы, так как следующие элементы могут быть получены с помощью .nextSibling.Функция nextElement() позволяет избежать захвата текстовых узлов.

0 голосов
/ 20 июля 2010

Вам не хватает параметра в нескольких ваших звонках на document.getElementById, а свойство для отключения <select> равно disabled, а не disable.У вас также есть =, где вам нужно ==.

function evalonsubmit(ID, n)
{
    var ElementID = document.getElementById(ID);
    if (ElementID.value == -1){
        for (var i=n+1; i <= 7; i++){
            var newID = "sel_" + i;
            var newValue = document.getElementById(newID);
            newValue.disabled = true;
            newValue.value = -1;
        }
    } else {
        var newID = "sel_"+(n+1);
        var newValue = document.getElementById(newID);
        newValue.disabled = false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...