该项目是一个用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>
';
答案 0 :(得分:0)
您的问题在于PHP代码。你没有引用你传递给函数的字符串,所以它认为它是一个引用。
<强>解决方案:强>
这是错误的一行:
filterSet('.$loc.');
您需要确保在其周围输出引号:
filterSet("'.$loc.'");
<强>解释强>
当$loc
设置为字符串"maple"
时,它会将以下字符串输出到Web浏览器。
filterSet(maple);
然后,javascript解释器将尝试查找变量maple
,而不是使用字符串"maple"
。然后它会抛出一个参考错误,因为它无法找到它。
使用更新的代码,PHP将发送以下内容。
filterSet("maple");
由于这是一个字符串,现在它将按预期工作。
答案 1 :(得分:-1)
使用函数作为过滤器方法的参数:
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;