我有一些代码,当用户从下拉列表中选择一个项目时,这会触发一个change事件,然后调用php页面进行处理。首次加载页面时,我选择一个项目,并在触发change事件时,这应更改所选select输入的占位符并禁用相同的输入:“#box_ffrtv”。
但是,发生的事情是更改仅在我在下拉菜单中进行了第二选择之后才发生,然后更改了占位符并禁用了输入。我对jquery还是很陌生,希望能对我要去哪里出错有所帮助。非常感谢。
jQuery 1.7.2:
选择jQuery:http://harvesthq.github.io/chosen/
jQuery代码
$(function() {
$("#frtv_dept").change(function() {
$(this).after('<div id="loader"><imgages src="img/loading.gif" alt="loading files" /></div>');
$.get('loadFrtvsubcat.php?frtv_dept=' + $(this).val(), function(data) {
$("#box_frtv").html(data);
$('#loader').slideUp(200, function() {
$(this).remove();
$("#box_frtv").trigger("chosen:updated");
});
});
});
});
PHP代码
if (mysql_num_rows($result) > 0) {
echo "<script type=text/javascript>\n";
echo "$(function() {\n";
echo "$(\".noRtvBoxes\").html('')\n";
echo "$('#box_frtv').attr('data-placeholder', \"Choose your boxes...\")\n";
echo "$(\"#box_frtv\").prop('disabled', false)\n";
echo "});\n";
echo "</script>\n";
while($row = mysql_fetch_array($result)) {
echo "<option value='$row[boxref]'>$row[boxref]</option>";
}
} else {
echo "<script type=text/javascript>\n";
echo "$(function() {\n";
echo "$('.noRtvBoxes').html('ERROR: There are no boxes in that dept. Please select another.').css({\"color\":\"red\", \"margin\": \"-6px 0 10px 22px\", \"font-size\": \"12px\", \"font-family\": \"Verdana, Geneva, sans-serif\"})\n";
echo "$('#box_frtv').attr('data-placeholder', \"No boxes to display...\").prop('disabled', true)\n";
echo "$('#box_ffrtv_chosen').find('option:selected').remove()\n";
echo "$('#box_ffrtv').html('')\n";
echo "$('#box_ffrtv').trigger(\"chosen:updated\")\n";
echo "$('#box_ffrtv').attr('data-placeholder', \"No files to display...\")\n";
echo "$('#box_ffrtv').prop('disabled',true)\n";
echo "$('.noRtvFiles').html('ERROR: There are no files in that box. Please select another.').css({\"color\":\"red\", \"margin\": \"-6px 0 10px 22px\", \"font-size\": \"12px\", \"font-family\": \"Verdana, Geneva, sans-serif\"})\n";
echo "</script>\n";
}
HTML代码
<select data-placeholder="Choose your file(s)..." class="chosen-select" name="box_ffrtv[]" id="box_ffrtv" multiple required="required">
<option value=""></option>
</select>
参考方案
如果要更新下拉字段,则应使用以下代码:
$('#box_ffrtv').on('chosen:ready', function(evt, params){
// If the Chosen dropdown is loaded properly
// Do whatever you want
// Refresh the state of the Chosen dropdown
$('#box_ffrtv').trigger("chosen:updated");
});
可能是由于尚未加载“选择”下拉字段而出现问题。上面的代码解决了这个问题。
还要检查您的jQuery版本:如果您使用的jQuery版本低于1.6,则不能使用prop
。检查此:Disable/enable an input with jQuery?
另外,您的JS代码中有一个错误:$(function(){
应该使用});
正确关闭。
我不知道您的控制台中没有任何错误。
我认为,您应该停止使用echo
编写JS代码。您可以使用?> ... write your HTML code <?php
。您的代码将更加整洁,并且您将摆脱添加的所有转义字符。
编辑:
我修复了您的代码。您在<script type="text/javascript">
上遇到了问题。您应该在引号之间输入类型的值。
<?php if(mysql_num_rows($result) > 0){ ?>
<script type="text/javascript">
$(function(){
$('#box_ffrtv').on('chosen:ready', function(evt, params){
$(".noRtvBoxes").html("");
$("#box_frtv").attr("data-placeholder", "Choose your boxes...");
$("#box_frtv").prop("disabled", false);
});
});
</script>
<?php
while($row = mysql_fetch_array($result)){
echo '<option value="' . $row[boxref] . '">' . $row[boxref] . '</option>';
}
} else {
?>
<script type="text/javascript">
$(function(){
$('#box_ffrtv').on('chosen:ready', function(evt, params){
$(".noRtvBoxes").html("ERROR: There are no boxes in that dept. Please select another.").css({"color":"red", "margin": "-6px 0 10px 22px", "font-size": "12px", "font-family": "Verdana, Geneva, sans-serif"});
$("#box_frtv").attr("data-placeholder", "No boxes to display...").prop('disabled', true);
$("#box_ffrtv_chosen").find("option:selected").remove();
$("#box_ffrtv").html("");
$("#box_ffrtv").trigger("chosen:updated");
$("#box_ffrtv").attr("data-placeholder", "No files to display...");
$("#box_ffrtv").prop("disabled",true);
$(".noRtvFiles").html("ERROR: There are no files in that box. Please select another.").css({"color":"red", "margin": "-6px 0 10px 22px", "font-size": "12px", "font-family": "Verdana, Geneva, sans-serif"});
});
});
</script>
<?php } ?>
打印二维阵列 - javascript我正在尝试打印子元素。在this example之后。怎么做?。$myarray = array("DO"=>array('IDEAS','BRANDS','CREATIVE','CAMPAIGNS'), "JOCKEY"=>a…
将简单的javascript代码转换为c# - javascript昨天我在这里问了一个问题。使用javascript和html解决方案很简单前一阵子我打算什么是操纵html来执行javascript中的任务但是我改变了主意,将javascript代码重写为c#这是输入<Abstract> <Heading>Abstract</Heading> <Para TextBreak=…
如何在没有for循环的情况下在Javascript中使用Django模板标签 - javascript我想在JavaScript中使用模板变量:我的问题是在javascript代码中使用for循环,for循环之间的所有事情都会重复..但我不想要....下面粘贴了我的代码..有人可以告诉我更好的方法吗这..因为这看起来很丑..这是我的代码: {% block extra_javascript %} <script src="/static/js…
JavaScript处理期间数组内部的数组 - javascript我正在尝试使用Ajax处理表单,并且在处理复选框时遇到了问题。我以为我可以在数组中做一个数组,将选中的框添加到数据对象中,但这似乎不起作用。它不会显示为控制台中对象的一部分或类似内容。我尝试了一些变化,但没有任何效果。这是当前的样子:var formData = { 'fname' : $('input[name=fname]&…
如果复选框切换复选框已选中,则在切换div中输入必填字段 - javascript我使用脚本用JavaScript切换了一些div。如果要选中复选框以显示toogle div,我想在toogle div中设置一些“必填”输入字段。有人能弄清楚吗?那是工作吗?function show(id) { if(document.getElementById) { var mydiv = document.getElementById(id); m…