代码之家  ›  专栏  ›  技术社区  ›  nickik

基本JS+Webdev帮助

  •  1
  • nickik  · 技术社区  · 14 年前

    我有点问题。我有七个 <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 回复  |  直到 14 年前
        1
  •  1
  •   Ahmed Aman    14 年前

    我刚修正了你代码中的一些简单错误。

    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;
        }
    }
    
        2
  •  1
  •   Felix Kling    14 年前

    不太确定你想要什么,但可能应该是:

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

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

    同样在 else 分支机构。


    除此之外,我会给你的变量取更有意义的名字。例如。 ElementID 让您假设该值是一个ID。但它不是。它是一个dom元素。同样 newValue .

        3
  •  0
  •   Tim Down    14 年前

    您的两个调用中缺少参数 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;
        }
    }
    
        4
  •  0
  •   Eric Miriam Farber    14 年前

    为什么不这样做:

    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 上的 <select> 元素,因为可以使用 .nextSibling . 这个 nextElement() 函数的作用是避免捕获文本节点。