select控件的change事件

  最近碰到个市区联动select,相关结构如下:

View Code
<li class="form-itemWrap">
  <dl class="form-item">
    <dt class="form-item-title"><label for="J_City">地址:</label></dt>
    <dd class="form-item-content">
      <p class="form-item-content-item">
        <select id="J_City" name="city" class="form-select">
         <option value="-1">请选择</option>
         <!-- <option value="$city.id">$city.name</option> 程序循环出来的city列表 -->
       </select>
      </p>
      <p class="form-item-content-item">
        <select id="J_Area" name="area" class="form-select">
         <option value="-1">请选择</option>
       </select>
      </p>
    </dd>
   <dd class="form-item-tip">
     <p class="form-item-tip-msg">必选</p>
   </dd>
  <dl class="form-item">
</li>
var selectCityVal = '程序指定的当前城市id';

  从结构上我们知道有2个select,一个是市下拉列表,一个是对应市的地区列表,而且程序加载完成后,需要js设置市select默认选中值为 selectCityVal 的option。

  前面我的做法就是,js设置 $('#J_City').val( selectCityVal ); 我以为js设置select的默认值也会触发select的change事件,那么area下拉列表的项也就会从ajax那边过来的数据填充,可是我实验了以后,却没有触发city的change事件。后面我网上搜索一下,才知道js设置的selct值不会触发change事件,解决办法也有的,就是object.fireEvent(),在设置了select的值后使用 object.fireEvent('onchange');来触发change事件(IE:document.getElementByIdx_x('hid_provider_id').attachEvent("onpropertychange",function(){alert('gggg');});)。举一反三,利用JQuery,我们可以在设置了select的值后,手动触发一次change事件,代码如下:

var $city = $('#JCity');
selectCityVal?$city.val(selectCityVal):$city.val('-1');
$city.trigger('change');

  这样就可以保证select每次页面加载都能触发一次change事件了。

 

  下面附上 JQuery 操作select,input[type=checkbox],input[type=radio]等的相关操作:

jQuery获取Select选择的Text和Value:
语法解释:
1. $("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项时触发
2. var checkText=$("#select_id").find("option:selected").text(); //获取Select选择的Text
3. var checkValue=$("#select_id").val(); //获取Select选择的Value
4. var checkIndex=$("#select_id ").get(0).selectedIndex; //获取Select选择的索引值
5. var maxIndex=$("#select_id option:last").attr("index"); //获取Select最大的索引值

jQuery设置Select选择的Text和Value:
语法解释:
1. $("#select_id ").get(0).selectedIndex=1; //设置Select索引值为1的项选中
2. $("#select_id ").val(4); //设置Select的Value值为4的项选中
3. $("#select_id option[text='jQuery']").attr("selected", true); //设置Select的Text值为jQuery的项选中

jQuery添加/删除Select的Option项:
语法解释:
1. $("#select_id").append("<option value='Value'>Text</option>"); //为Select追加一个Option(下拉项)
2. $("#select_id").prepend("<option value='0'>请选择</option>"); //为Select插入一个Option(第一个位置)
3. $("#select_id option:last").remove(); //删除Select中索引值最大Option(最后一个)
4. $("#select_id option[index='0']").remove(); //删除Select中索引值为0的Option(第一个)
5. $("#select_id option[value='3']").remove(); //删除Select中Value='3'的Option
5. $("#select_id option[text='4']").remove(); //删除Select中Text='4'的Option

select[name='country'] option[selected] 表示具有name 属性,
并且该属性值为'country' 的select元素 里面的具有selected 属性的option 元素;
可以看出有开头的就表示后面跟的是属性。

单选框:
$("input[type=radio][checked]").val(); //得到单选框的选中项的值(注意中间没有空格)
$("input[type=radio][value=2]").attr("checked",'checked'); //设置单选框value=2的为选中状态.(注意中间没有空格)

复选框:
$("input[type=checkbox][checked]").val(); //得到复选框的选中的第一项的值
$("input[type=checkbox][checked]").each(function(){ //由于复选框一般选中的是多个,所以可以循环输出
alert($(this).val());
});

$("#chk1").attr("checked",'');//不打勾
$("#chk2").attr("checked",true);//打勾
if($("#chk1").attr('checked')==undefined){} //判断是否已经打勾

posted @ 2012-11-07 15:05  小鱼儿-lovefishs  阅读(5256)  评论(1编辑  收藏  举报