Javascript不允许表单中的所有选项

Javascript不允许表单中的所有选项,javascript,jquery,html,Javascript,Jquery,Html,我在一些JavaScript中有一个bug,它允许在HTML表单中进行拖放 用户为每个位置选择3名球员,但投手(p)和外野手(OF)除外,他们选择6名。如果我禁用JavaScript并使用基本表单,它可以正常工作,但是代码不允许为OF提供6个选项,尽管它对P也可以正常工作 以下是原文: if (sel <= 3 || (cP.options[cP.selectedIndex].text == 'P' && sel <= 6)) { if(选择0){ var t

我在一些JavaScript中有一个bug,它允许在HTML表单中进行拖放

用户为每个位置选择3名球员,但投手(p)和外野手(OF)除外,他们选择6名。如果我禁用JavaScript并使用基本表单,它可以正常工作,但是代码不允许为OF提供6个选项,尽管它对P也可以正常工作

以下是原文:

if (sel <= 3 || (cP.options[cP.selectedIndex].text == 'P' && sel <= 6)) {   
if(选择0){
var textRange=document.body.createTextRange();
textRange.moveToElementText(el[0]);
textRange.select();
}
});
}
$('#currentPosition').text(位置[0].pos);
$(“#可用位置”).bind('change',positionsOnChange);
PopulateLayers选择(位置[0]。玩家)
}
功能位置(pos){
var out=新对象();
out.pos=pos;
out.players=新数组();
返回;
}
功能播放器(名称、id、选择){
var out=新对象();
out.name=名称;
out.id=id;
out.selection=选择;
返回;
}
功能位置(表格){
var out=新数组();
form.find('fieldset')。每个(函数(i1){
var key=$(this.find('legend').text();
out[i1]=位置(键);
var tmpPlayers=新数组();
var playerName=$(this).find('p').each(函数(i2){
var playerName=$(this.text();
var playerSelect=$(this.find('select');
var playerId=playerSelect.attr(“名称”);
var playerSelection=playerSelect.selectedIndex;
tmpPlayers[i2]=player(playerName.split('--')[0],playerId,playerSelection);
});
out[i1]。players=tmpPlayers;
});
返回;
}
函数位置更改(){
$('#currentPosition').text(this.options[this.selectedIndex].text);
重置DropTargets(位置[this.selectedIndex].players];
PopulateLayers选择(位置[this.selectedIndex].players];
}
函数dragPlayer(事件){
event.originalEvent.dataTransfer.setData('Text',$(event.target).closest('a[id')).attr('id');
}
函数dropPlayer(事件){
var cP=$(“#可用位置”)[0];
var el=$(“#”+event.originalEvent.dataTransfer.getData('Text');
数据=$.trim(el.text());
编号=el.attr('data-id');
$(event.target).text(数据);
var-sel=0;
而(event.target.id!=“当前-”+sel){
sel++;
}
//艾伦补充道

if(sel)(如果可能的话,如果您可以制作一个jsfiddle(或者您想要使用的任何替代方案),那就好了因此,人们可以看到它的实际操作。这将使它更容易理解。请避免使用JS Fiddle,Stackoverflow已经有一年没有获得类似的功能了。您是否调试并查看了文本是什么以及sel是什么?如果可能,如果您可以制作JSFIDLE(或任何您想要使用的替代方案),那将是一件好事所以人们可以看到它的实际作用。这将使它更容易理解。请避免JS Fiddle,Stackoverflow已经有一年没有获得类似的功能了。你调试并看到文本是什么和sel是什么了吗?
if (sel <= 3 || (cP.options[cP.selectedIndex].text == 'P' && sel <= 6) || (cP.options[cP.selectedIndex].text == 'OF' && sel <= 6) ) {  
var positions;
var pitchers; //global for now...
function init() {
    //$('head').append('<link rel="stylesheet" href="http://www.dotrob.com/gameplan/tools/voter.css" type="text/css" />');
    var votingForm = $('form');
    votingForm.before('<div id="voter">' +
                        '<p>Use the drop down list to select a position.  Drag the players from the right into the boxes. <em>The fourth,fifth and sixth boxes are only used for pitchers and outfielders</em>. Press the SUBMIT button at the bottom once you are finished. (If drag and drop is not supported in your browser then the old style form is below.)</p><br />' +
                        '<h2 id="currentPosition">&nbsp;</h2>' +
                        '<label>Vote for: <select id="availablePositions"></select></label>' +
                        '<div id="currentVotes">' +
                            'First choice:<div id="current-1" class="droptarget">&nbsp;</div>' +
                            'Second choice:<div id="current-2" class="droptarget">&nbsp;</div>' +
                            'Third choice:<div id="current-3" class="droptarget">&nbsp;</div>' +
                            'Fourth choice:<div id="current-4" class="droptarget">&nbsp;</div>' +
                            'Fifth choice:<div id="current-5" class="droptarget">&nbsp;</div>' +
                            'Sixth choice:<div id="current-6" class="droptarget">&nbsp;</div>' +
                        '</div>' +
                        '<div id="currentPlayers"></div>' +
                      '</div>');
    positions = getPositions(votingForm);
    $.each(positions, function(key, value) {   
        $('#availablePositions')
            .append($("<option></option>")
            .attr("value",key)
            .text(value.pos)); 
    });
    $('#currentVotes').bind('dragover', function(event) {
                                            if ($(event.target).closest('.droptarget').hasClass('droptarget')) {
                                                event.preventDefault();
                                                log('dragover');
                                            }
                }).bind('drop', dropPlayer);
    $('#currentPlayers').bind('dragstart', dragPlayer).bind('click', cancelEvent);
    if (document.selection && document.body.createTextRange) {
        $('#currentPlayers a').live('hover', function(event) {
            var el = $(event.target).closest('a[id]').find('span');
            console.log(el);
            if (el.length > 0) {
                var textRange = document.body.createTextRange();
                textRange.moveToElementText(el[0]);
                textRange.select();
            }
        });
    }
    $('#currentPosition').text(positions[0].pos);
    $('#availablePositions').bind('change',positionsOnChange);
    populatePlayersToChoose(positions[0].players)
}
function position(pos) {
    var out = new Object();
    out.pos = pos;
    out.players = new Array();
    return out;
}
function player(name,id,selection) {
    var out = new Object();
    out.name = name;
    out.id = id;
    out.selection = selection;
    return out;
}
function getPositions(form) {
    var out = new Array();
    form.find('fieldset').each(function (i1) {
            var key = $(this).find('legend').text();
            out[i1] = position(key);
            var tmpPlayers = new Array();
            var playerName = $(this).find('p').each(function (i2) {
                    var playerName = $(this).text();
                    var playerSelect = $(this).find('select');
                    var playerId = playerSelect.attr("name");
                    var playerSelection = playerSelect.selectedIndex;
                    tmpPlayers[i2] = player(playerName.split('--')[0],playerId,playerSelection);
                });
            out[i1].players = tmpPlayers;
        });
    return out;
}
function positionsOnChange() {
    $('#currentPosition').text(this.options[this.selectedIndex].text);
    resetDropTargets(positions[this.selectedIndex].players);
    populatePlayersToChoose(positions[this.selectedIndex].players);
}
function dragPlayer(event) {
    event.originalEvent.dataTransfer.setData('Text', $(event.target).closest('a[id]').attr('id'));
}
function dropPlayer(event) {
    var cP = $('#availablePositions')[0];
    var el = $('#' + event.originalEvent.dataTransfer.getData('Text'));
    data = $.trim(el.text());
    number = el.attr('data-id');
    $(event.target).text(data);
    var sel = 0;
    while (event.target.id != 'current-'+sel) {
        sel++;
    }
    //Alan changed added OF
    if (sel <= 3 || (cP.options[cP.selectedIndex].text == 'P' && sel <= 6)  || (cP.options[cP.selectedIndex].text == 'OF' && sel <= 6) ) {        
        log(data);
        log(number);
        $('form select[name="' + number +'"]')
            .each(function() {
                $(this.parentNode.parentNode).find('select')
                    .each(function() {if (this.selectedIndex == sel){this.selectedIndex = 0}});
                this.selectedIndex = sel;
            });
        var p = positions[cP.selectedIndex].players;
        for (var i = 0; i < p.length; i++) {
            if (p[i].id == number) {
                log('found' + p[i].id + ', currently set to ' + p[i].selection);
                p[i].selection = sel;
                log('found' + p[i].id + ', now set to ' + p[i].selection);
            }
        }
    }
    event.preventDefault();
    log('dropPlayer ' + event.target.id + ' ' + number);
}
function cancelEvent(event) {
    event.preventDefault();
}
function populatePlayersToChoose(players) {
    $('#currentPlayers').text('');
    for (var i=0; i<players.length; i++) {
        $('#currentPlayers').append(
            $('<a id="a' + players[i].id + '" href="#" data-id="' + players[i].id + '" draggable="true"><span>' + players[i].name + '</span></a>')
        );
        if (players[i].selection > 0) {
            $('#current-'+ (players[i].selection)).text(players[i].name);
        }
    }
}
function resetDropTargets(players) {
    $('#currentVotes div.droptarget').text(' ');
}
$(document).ready(init);
function log(text) {
    //console.log(text);
}