3

複数選択リストがあり、その中でクリック+ドラッグを使用して選択を行う機能を無効にして、クリックごとに1つの新しい値のみを選択できるようにしたいのですが、同時にリストを次のように操作し続けたいと考えていますコントロール+クリックを使用して複数の値を選択できるように、「複数」選択。

タグで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>

純粋な html ではなく、javascript を使用する必要があるのではないかと思います。特に、選択リストは onchange イベントをトリガーします。これは、これの鍵となる可能性があります。頭に浮かぶ 1 つのアイデアは、各 onchange イベントをトリガーする選択の数を何らかの方法でカウントすることです。複数の場合、それらの値は onchange イベントで処理されません。またはイベントは完全にキャンセルされます。ただし、もっと簡単な解決策があることを願っています。

4

1 に答える 1

0

html でドラッグを無効にする方法を見つけることができませんでしたが、ページを更新することで複数の新しい選択を中和する機能を思いつくことができました。派手なフットワークのように思えますが、効果はあまりありませんが、私の目的には合っています。誰かがより良い解決策を思いついた場合に備えて、これを最良の回答としてマークする前に、この質問を1日か2日開いたままにします.

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");
            }
    }
于 2013-09-26T04:27:02.470 に答える