Когда я добавляю опцию для выбора, выбор становится уже - PullRequest
1 голос
/ 13 февраля 2009

Унаследовано приложение со страницей, имеющей ссылку, которая вызывает функцию JavaScript addValueClick (), когда я делаю это, появляется диалоговое окно, я набираю некоторый текст, а затем текст помещается в поле выбора. Каждый раз, когда новая опция добавляется в выборку, она сужается примерно на 5 пикселей. Я не могу понять, почему это происходит, но это происходит только в IE7

Вот код JavaScript:

function addValueClick()
{
    var newValue = prompt("Please enter a new value.","");
    if (newValue != null && newValue != "")
    {
        var lst = document.getElementById("lstValues");
        var opt = document.createElement("option");
        opt.setAttribute("selected", "true");
        opt.appendChild(document.createTextNode(newValue));
        lst.appendChild(opt);
        updateBtns();
        copyValues();
    }
}

function copyValues()
{
    var frm = document.forms[0];
    var lst = frm.elements["lstValues"];
    var hid = frm.elements["hidValues"];
    var xml = "<root>";
    for (var i = 0; i < lst.options.length; i++)
    {
        xml += "<value seq_num=\"" + (i + 1) + "\">" +
          lst.options[i].text + "</value>";
    }
    xml += "</root>";
    hid.value = xml;
}

function updateBtns()
{
    var lst = document.getElementById("lstValues");
    var iSelected = lst.selectedIndex;
    var lnkEdit = document.getElementById("lnkEditValue");
    var lnkDelete = document.getElementById("lnkDeleteValue");
    var lnkUp = document.getElementById("lnkValueUp");
    var lnkDown = document.getElementById("lnkValueDown");
    if (iSelected == -1)
    {
        lnkEdit.style.visibility = "hidden";
        lnkDelete.style.visibility = "hidden";
        lnkUp.style.visibility = "hidden";
        lnkDown.style.visibility = "hidden";
    }
    else
    {
        lnkEdit.style.visibility = "visible";
        lnkDelete.style.visibility = "visible";

        if (iSelected == 0)
            lnkUp.style.visibility = "hidden";
        else
            lnkUp.style.visibility = "visible";

        if (iSelected == lst.options.length - 1)
            lnkDown.style.visibility = "hidden";
        else
            lnkDown.style.visibility = "visible";
    }
}

EDIT: HTML, на самом деле это ASP.NET. Все, что делает метод listValueChanged (), это вызывает updateButtons () выше.

<tr>
    <TD class=body vAlign=top noWrap align=right><b>Values:</TD>
    <TD class=body vAlign=top noWrap align=left><asp:ListBox id="lstValues" runat="server" onchange="lstValuesChange();" Rows="9" onselectedindexchanged="lstValues_SelectedIndexChanged"></asp:ListBox></TD>
    <TD class=body vAlign=top noWrap align=left>
        <TABLE id="Table2" cellSpacing="2" cellPadding="2" border="0">
            <TR>
                <TD noWrap>
                    <asp:HyperLink id="lnkAddValue" runat="server" NavigateUrl="javascript:addValueClick();">Add</asp:HyperLink></TD>
            </TR>
            <TR>
                <TD noWrap>
                    <asp:HyperLink id="lnkEditValue" runat="server" NavigateUrl="javascript:editValueClick();">Edit</asp:HyperLink></TD>
            </TR>
            <TR>
                <TD noWrap>
                    <asp:HyperLink id="lnkDeleteValue" runat="server" NavigateUrl="javascript:deleteValueClick();">Delete</asp:HyperLink></TD>
            </TR>
            <TR>
                <TD noWrap>&nbsp;</TD>
            </TR>
            <TR>
                <TD noWrap>
                    <asp:HyperLink id="lnkValueUp" runat="server" NavigateUrl="javascript:valueUpClick();">Up</asp:HyperLink></TD>
            </TR>
            <TR>
                <TD noWrap>
                    <asp:HyperLink id="lnkValueDown" runat="server" NavigateUrl="javascript:valueDownClick();">Down</asp:HyperLink></TD>
            </TR>
        </TABLE>
    </TD>
</TR>

Ответы [ 3 ]

0 голосов
/ 14 февраля 2009

Я знаю, что добавление опций через SelectElement.innerHTML = '...'; завершается неудачно в IE (ошибка 274) .

Но я не знаю, не удалось ли добавить опции через .createElement () ... хотя я не слишком удивлен.

Вы можете использовать синтаксис JavaScript new Option(); для их создания, я вполне уверен, что он работает без сбоев.

0 голосов
/ 16 февраля 2009

Проблема заключалась в том, что опция была добавлена ​​в выборку. Я изменил ее на следующую, и она отлично работает:

function addValueClick()
{
    var newValue = prompt("Please enter a new value.","");
    if (newValue != null && newValue != "")
    {
        var lst = document.getElementById("lstValues");
        var opt = document.createElement("option");
        opt.text = newValue;
        opt.value = newValue;
        try {
            lst.add(opt, null); // real browsers
        }
        catch (ex) {
            lst.add(opt); // IE
        }

        updateBtns();
        copyValues();
    }
}
0 голосов
/ 13 февраля 2009

Это может быть больше связано с HTML, чем сценарий. Что входит в выбор? Основываясь на JS, я не думаю, что здесь есть какие-либо проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...