需要帮助来调试jQuery选择器逻辑

时间:2011-02-10 17:12:07

标签: jquery

我有一个下拉选择器,需要根据选择加载表单的其他部分。我需要确保没有选择相同的选项。这是我根据@Mike Ruhlin建议进行验证的尝试。它仍然不起作用,但我觉得我很接近。而且,我注意到我的逻辑崩溃了。通过选择一个选项,下面的所有三个选项现在都显示相同。每个选择应立即加载一个选择。

我在这里缺少什么?

这是我到目前为止所得到的:

$('.mySelector').change(function(){

        var selectForm = '.' + $(this).val();           

        if (selectForm != '.selectOne') {
            // check for dupe selections
            var alreadyUsed = {};

            $("select").each(function(){

                var thisVal = $(this).val();

                if(alreadyUsed[thisVal]){
                    // found a dupe
                    alert('already used');
                }

                $('div').next('.fLoad').load('formParts.html ' + $selectForm );

            });
        }
});

<select class="mySelector">
   <option value="selectOne">Select one</option>
   <option value="o1">Car details</option>
   <option value="o2">Boat details</option>
   <option value="o3">Train details</option>
   <option value="o4">Bike details</option>
   <option value="o5">Sub details</option>
</select>

<div class='fLoad'> </div>

<select class="mySelector">
   <option value="selectOne">Select one</option>
   <option value="o1">Car details</option>
   <option value="o2">Boat details</option>
   <option value="o3">Train details</option>
   <option value="o4">Bike details</option>
   <option value="o5">Sub details</option>
</select>

<div class='fLoad'> </div>

<select class="mySelector">
   <option value="selectOne">Select one</option>
   <option value="o1">Car details</option>
   <option value="o2">Boat details</option>
   <option value="o3">Train details</option>
   <option value="o4">Bike details</option>
   <option value="o5">Sub details</option>
</select>

<div class='fLoad'> </div>

2 个答案:

答案 0 :(得分:1)

您的$('div')选择器会在页面上选择所有 div并在其后面查找.float类。我假设您只想在当前<select>之后立即选择div。

您必须执行$(this).next('div.fLoad').load(url)

之类的操作

此外,我不确定您要使用'formParts.html ' + $selectForm加载什么,因为您将拥有一个包含文件名,空格和选择值的网址。如果要将值作为参数传递,则必须采用以下形式:formParts.html?paramName=paramValue,但html文件不处理参数。虽然,这是另一个问题。 :)

答案 1 :(得分:1)

我不确定你在做什么:

$('div').next('.fLoad').load('formParts.html ' + $selectForm );

我认为你可以把它放回正确的位置;)

 $('.mySelector').change(function(index, elem){
    var filter = $(this).val();
    if(filter !="selectOne"){
        var size = $('.mySelector').not(this).not(function(index){
            return $(this).val() != filter;
        }).size();
      if(size > 0){
        alert("duplicates!");
     }

    }

});