Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery逻辑未应用于动态创建的html_Javascript_Jquery_Html - Fatal编程技术网

Javascript JQuery逻辑未应用于动态创建的html

Javascript JQuery逻辑未应用于动态创建的html,javascript,jquery,html,Javascript,Jquery,Html,我已经编写了以下JavaScript/JQuery代码。当从HTML下拉菜单中选择一个选项时,会触发此代码。它将所选值与已添加到HTML表中的值进行比较: $('#addonSelectOptions').on('change', function(e){ e.preventDefault(); var selectedAddon = $('#addonSelectOptions option:selected').val(); var selectedText = $

我已经编写了以下JavaScript/JQuery代码。当从HTML下拉菜单中选择一个选项时,会触发此代码。它将所选值与已添加到HTML表中的值进行比较:

$('#addonSelectOptions').on('change', function(e){
    e.preventDefault();

    var selectedAddon = $('#addonSelectOptions option:selected').val();
    var selectedText = $('#addonSelectOptions option:selected').text();
    var currentAddons = $('#acg_addons').val();

    if(selectedAddon == '0') {
        $('#availableAddOns > tbody:last').empty();
        $('#availableAddOns > tbody:last').append('<tr id="noaddonShown"><td>No add-ons</td></tr>');
        $('#acg_addons').val(' ');
    } else {

        var addonStrings = currentAddons.toString();
        var addonCheck = 'addOn-'+selectedAddon;

        $(".selectedAddonTableTR").each(function() {
            var rowID = $(this).attr('id');

            if(rowID == addonCheck) {
                alert('You have already added this Add On to this Game');
                return false;
            } else {
                $('#noaddonShown').empty();
                $('#availableAddOns > tbody:last').append('<tr id="addOn-'+selectedAddon+'" class="selectedAddonTableTR"><td>'+selectedText+'</td></tr>');
                var addons = $('#acg_addons').val();
                $('#acg_addons').val(addons+''+selectedAddon+',');
            }

        });

    }

});
如果我从下拉列表中选择了一个已经存在于表中的选项,则会显示该警报的目的。然后,如果我选择了一个不在HTML表中的选项,它会将它添加到正确的表中。但是,如果选择新添加的选项,则会触发警报,但随后会再次将其添加到表中。它只应该显示警报,而不是第二次添加

我在代码中遗漏了什么来防止这种情况

编辑: 基于缺少MCVE,以下是下拉HTML:

<select id="addonSelectOptions">
    <option value="0">--No Addon--</option>
    <option value="2">Add On 1</option>
    <option value="1">Add On 2</option>
</select>
这也是使用的HTML表:

<table id="availableAddOns">
    <tbody>
        <tr id="addOn-1" class="selectedAddonTableTR">
            <td>Add On 1</td>
        </tr>
    </tbody>
</table>

这会让你走上正确的道路。你没有很好地解释你的问题,但我认为这会让你走上正确的方向。请阅读我的评论,如果您需要更详细的解释,请告诉我发生了什么

$('#addonSelectOptions').on('change', function(e){
    e.preventDefault();

    var select = $(this), //Don't use var declaration more than once
        selectedAddon = $(select).val(),
        selectedAddonIdString = 'addOn-' + selectedAddon,
        selectedText = $(select).find('option:selected').text(),
        availableAddOns = $('#availableAddOns'), // Cache your DOM elemtns, don't select them more than once
        currentAddonArr = []; //Use an array to store multiple values... I don't know what you were trying to do with addons = $('#acg_addons').val();

    if(selectedAddon == '0') {
        $(availableAddOns).find('> tbody:last').empty();
        //You didn't prove any HTML, but you can't dynamically add an HTML element here, but then reference it below since it may not exist
        //If this part of the if statement never fires, the #noaddonShown element will not exist
        $(availableAddOns).find('> tbody:last').append('<tr id="noaddonShown"><td>No add-ons</td></tr>');        // Rework this
    } else {

        if($.inArray(selectedAddonIdString, currentAddonArr) === -1) {
            //You don't need to run empty funtions on an element that will simply show the same information over and over again if a condition is met.
            //Instead use $('#noaddonShown').hide(); $('#noaddonShown').show(); to toggle the element
            $('#noaddonShown').empty(); // rework this
            $(availableAddOns).find('> tbody:last').append('<tr id="addOn-'+selectedAddon+'" class="selectedAddonTableTR"><td>'+selectedText+'</td></tr>');
            //var addons = $('#acg_addons').val(); not needed
            //$('#acg_addons').val(addons+''+selectedAddon+',');

        } else {
            alert('You have already added this Add On to this Game');
            return false;
        }

    }

});

你缺少了一个MCVE。我添加了缺少的下拉列表和表格HTML,我认为我已经包括了这个。