我在这里读了很多书,并为我正在进行的项目(这将是一个购物门户)找到了很多帮助。不幸的是,我找不到以下问题的解决方案:
如果用户(作为卖家)想要创建一个新的产品描述,他必须决定他的新产品将被归档在哪个类别中。
因此,一开始他选择了类别级别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();
}
});
}