防止单击+拖动多个选择列表中的选择



我有一个多选列表,我想禁用在其中使用单击+拖动进行选择的功能,以便每次单击只能选择一个新值 - 但同时我想继续将列表作为"多个"选择进行操作,以便我仍然可以使用 control+click 选择多个值。

我尝试在标签中摆弄 onselectstart 和 ondragstart,但它们似乎在多选列表中没有做任何事情。例:

<Select id="foo" name="foo[]" multiple="yes" onselectstart="return false" onchange="ajaxFunction()" Size="5">  
    <option value="" selected>Any</option>  
    <option value="bar"  ondragstart=" return false;">foo</option>  
    <option value="foobar">bar</option> 
    <option value="barfoo">foobar</option>
</Select>

怀疑我可能需要使用javascript而不是纯html。值得注意的是,选择列表会触发一个 onchange 事件,这可能是一个关键 - 我想到的一个想法是以某种方式计算触发每个 onchange 事件的选择数量,如果有多个,那么这些值不会在 onchange 事件中处理或事件被完全取消。但是,希望有一个更简单的解决方案。

好吧,

我找不到在 html 中禁用拖动的方法,但我确实设法想出了一个通过刷新页面来中和多个新选择的功能。似乎有很多花哨的步法效果不大,但无论如何它都适合我的目的。我会把这个问题搁置一两天,然后再将其标记为最佳答案,以防有人想出更好的解决方案。

function ajaxfunction(sel)
    {
        var total_selections_counter = 0;
            //i.e. total selections passed to the onchange event, whether selected previously or not
        var overlapping_selections_counter = 0;
            //i.e. selections which were already selected and are also re-selected and passed to the onchange event
        for (var i = 0; i < sel.options.length; i++)
            {
                if(sel.options[i].selected)
                    {
                        total_selections_counter++;
                    }
                if(sel.options[i].selected && sel.options[i].defaultSelected)
                    {
                        overlapping_selections_counter++;
                    }
            }
        var new_selections_counter = total_selections_counter - overlapping_selections_counter;
        if(new_selections_counter > 1)
            {
                location.reload(true);
            }
        else
            {
               alert("continue processing");
            }
    }

相关内容

  • 没有找到相关文章

最新更新