Javascript jQuery - 选择选择框选项有时只能工作

时间:2015-03-06 14:40:55

标签: javascript php jquery html-select

该项目是一个用PHP编写的MVC项目

我在一个视频中有一个AJAX调用,它与一个div,一些在页面上做某些事情的Javascript相呼应。在脚本的末尾是一段JQuery,应该更改选择框选择选项。我做了很多关于在这个网站和其他网站上切换选择选项的研究,经过一些游戏后我得到了一些代码:

function filterSet(optValue){

    $("#mySelect option").prop('selected', false)
                         .filter('[value="'+ optValue +'"]')
                         .prop('selected', true);
}

奇怪的是,它有时会起作用,有时它不起作用。在过去一小时左右的时间里对它进行了测试,它曾经工作过一次,但在此之前它确实有效,而我对代码的唯一更改就是改变了封闭的方法名称。

控制台提供的错误是'ReferenceError:maple未定义'其中'maple'是optValue变量中的单词。

ReferenceError:未定义maple

我不明白为什么我会得到一个未定义的错误,考虑到select选项的值被硬编码到select html中,我已经尝试了jquery,将选项值硬编码到变量假设传入的内容,但我仍然得到同样的错误,这很奇怪,因为曾经有一段时间这段代码完美无缺!不止一次实际上,它多次测试时都有效!但不知道。

选择框html:

<select id="mySelect">
        <option value = 'all' selected> Ward </option>
        <option value = 'maple'> Maple </option>
        <option value = 'oak'> Oak </option>
        <option value = 'w3'> Ward 3 </option>
        <option value = 'w4'> Ward 4 </option>
        <option value = 'w5'> Ward 5 </option>
        <option value = 'w6'> Ward 6 </option>
</select>       

任何人都可以对此有所了解吗?

如何调用filterSet方法。 ajax调用导致此脚本回显到页面上的div,在调用ajax调用filterSet()的成功回调时调用。

echo '
            <script type="text/javascript">
            function locateSpecific(){

            scale = 1;
            height =' . $height . '
            width =' . $width . '

            var imageUrl = "' . $imageURL . '";
            var bounds = new L.LatLngBounds([0, 0], [height / scale,width / scale]);

            map.removeLayer(markerGroup);

            L.imageOverlay(imageUrl, bounds, { noWrap: true, maxZoom: 3, minZoom: -3 }).addTo(map);

            }

            filterSet('.$loc.');

            </script>

            ';

2 个答案:

答案 0 :(得分:0)

您的问题在于PHP代码。你没有引用你传递给函数的字符串,所以它认为它是一个引用。

<强>解决方案:

这是错误的一行:

filterSet('.$loc.');

您需要确保在其周围输出引号:

filterSet("'.$loc.'");

<强>解释

$loc设置为字符串"maple"时,它会将以下字符串输出到Web浏览器。

filterSet(maple);

然后,javascript解释器将尝试查找变量maple,而不是使用字符串"maple"。然后它会抛出一个参考错误,因为它无法找到它。

使用更新的代码,PHP将发送以下内容。

filterSet("maple");

由于这是一个字符串,现在它将按预期工作。

答案 1 :(得分:-1)

使用函数作为过滤器方法的参数:

&#13;
&#13;
function filterSet(optValue){
    $("#mySelect option")
        .filter(function () { return $(this).val() == optValue; })
	.prop('selected',true)
}

filterSet('oak');
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="mySelect">
        <option value = 'all' selected> Ward </option>
        <option value = 'maple'> Maple </option>
        <option value = 'oak'> Oak </option>
        <option value = 'w3'> Ward 3 </option>
        <option value = 'w4'> Ward 4 </option>
        <option value = 'w5'> Ward 5 </option>
        <option value = 'w6'> Ward 6 </option>
</select>
&#13;
&#13;
&#13;