如何在添加<;选择>;


How to get the value of a jquery.load before appending a <select>

我在这里读了很多书,并为我正在进行的项目(这将是一个购物门户)找到了很多帮助。不幸的是,我找不到以下问题的解决方案:

如果用户(作为卖家)想要创建一个新的产品描述,他必须决定他的新产品将被归档在哪个类别中。

因此,一开始他选择了类别级别1->jquery在加载所选级别1类别下的类别(级别2)选项列表后,会给我添加一个选择。

到目前为止没有问题。但我总共有4个级别的类别。对于某些类别,可能发生例如3级类别没有4级类别的情况。因此,在更改级别3选择的值后,我碰巧附加了一个空的级别4选择。

我的php脚本返回选项列表,如果在数据库中找不到级别4的类别,则返回false。

我不是专家,所以我已经尝试了好几个小时才找到解决方案。如果第四个选择为空,如何防止该查询附加到我?我只有[object object]作为'value',无论我有一个选项列表还是false。

非常感谢您的阅读。希望有人能帮忙:-)

这是我的catFill.js 的一些代码

$(document).ready(function () {
  $('#catLev1').change(function () {
    var $lWert = $('#catLev1').val();
    var $lang = $('#langId').val();
    var $zuordnung = null;
    $('#catLev2').remove();
    $('#catLev3').remove();
    $('#catLev4').remove();
    if($lWert !== '')
    {
      $zuordnung = $('<select id="catLev2" name="lev2" class="levelSelect"></select>').appendTo('#categories');
      $zuordnung.load('rem/remoteSearchLevelCat.php', {cat:$lWert, lang:$lang}); 
      }
    $('#catLev2').change(function () {
    $('#catLev3').remove();
    $('#catLev4').remove();
    var $lWert2 = $('#catLev2').val();
    var $lang = $('#langId').val();
    var $zuordnung2 = null;
    if($lWert2 !== '')
    {
        $zuordnung2 = $('<select id="catLev3" name="lev3" class="levelSelect"></select>').appendTo('#categories');
        $zuordnung2.load('rem/remoteSearchLevelCat.php', {cat:$lWert2, lang:$lang});
    }
    $('#catLev3').change(function () {
        $('#catLev4').remove();
        var $lWert3 = $('#catLev3').val();
        var $lang = $('#langId').val();
        var $zuordnung3 = null;
        if($lWert3 !== '')
        {
            $zuordnung3 = $('<select id="catLev4" name="lev4" class="levelSelect"></select>').appendTo('#categories');
            $zuordnung3.load('rem/remoteSearchLevelCat.php', {cat:$lWert3, lang:$lang});
        }
    });
  });
});
});

好的,非常感谢!!我找到了解决办法。问题是.load方法总是只返回[object object],并且没有机会获得附加的长度或大小,因为(我想)它在document.ready之后不存在。所以我现在使用jquery.get方法来处理我用这个方法接收的数据。

解决方案:

$.get('rem/remoteSearchLevelCat.php', { cat: $lWert3, lang: $lang })
            .done(function(data) {
            if(data !== 'false')
            {
                $zuordnung3 = $('<select id="catLev4" name="lev4" class="levelSelect"> </select>').appendTo('#categories');
                $zuordnung3.load('rem/remoteSearchLevelCat.php', {cat:$lWert3, lang:$lang});
            }

没有任何例子很难理解你的问题,但

我的php脚本返回选项列表,如果没有级别4,则返回OR false在数据库中可以找到类别。

也许我误解了,但您应该检查php返回的数据是否包含"选项"字符串。(我想,它会返回一些东西或错误)。下面是一些使用jQuery的.get方法的例子:

$.get('/url/to/the/php', function(leveldata) {
 if (leveldata.indexOf('option') > -1) {
   // append to the fourth select
 }
});

编辑:

好的,使用jquery的加载方法。请尝试在创建select元素之前获取数据,或者在内容为空时删除select。

试试这个

...
$zuordnung3 = $('<select id="catLev4" name="lev4" class="levelSelect"></select>').appendTo('#categories');
$zuordnung3.load('rem/remoteSearchLevelCat.php', {cat:$lWert3, lang:$lang});
if ($('#catLev4 option').size == 0) {
 $('#catLev4').remove();
}

或者这个

    $zuordnung3.load('rem/remoteSearchLevelCat.php', {cat:$lWert3, lang:$lang},   function(responseText, textStatus, XMLHttpReques) {
if(responseText.length == 0) {
     $('#catLev4').remove();
}
});

这个问题既含糊又复杂。让我们根据给出的内容做几个假设。

jquery appends me a select after loading the option list of categories

假设你正在做这样的事情:

$.ajax({...   
    success: function (data) {
        (make a select box)
    }
})

以及CCD_ 1。

我现在的问题是,为什么JavaScript不检查data的计算结果是否为true?

$.ajax({...   
    success: function (data) {
        if (data) {  // if data contains anything besides false
            (make a select box)
        } else {
            (don't make a select box)
        }
    }
})

编辑

呃,处理一个空的下拉框。

if($lWert3 !== '') {
    $zuordnung3 = $('<select id="catLev4" name="lev4" class="levelSelect"></select>').appendTo('#categories');
    $zuordnung3.load('rem/remoteSearchLevelCat.php', {cat:$lWert3, lang:$lang}, function () {
        if ($zuordnung3.find('option').length <= 0) {
            $zuordnung3.remove();
        }
    });
}