在html中,有php通过smarty传递过来的一个变量,比如用户的性别(sex),如果是男性我会用js去做一些操作。如果是女性则会去做另一些操作。一般的写法如下:
<script type='text/javascript' >
<{ if $sex == 'male'}>
    var xxxx=123;
    do_some_thing(); //可能操作比较复杂
<{ else }>
    var yyyy=456;
    do_other_thing(); //可能操作比较复杂
<{ /if }>
</script>    但是在html里面直接写js很影响页面的加载。 
    不知道有没有别的办法去执行那段js。而且那段js里有smarty变量,对js的修改和维护带来的不少的麻烦。
    想过把sex这个变量用<input type='hidden' id=user_sex value='<{$sex}>' /> 来存储,然后需要的时候再document.getElementById('user_sex'): 。但是哪一天这个sex变量名称变了,或者取消了,那还得去搜索出input元素,然后把它删掉,这样觉得很别扭。
    不知道大牛们有啥好的方法。

解决方案 »

  1.   

    1.   执行js不外乎就两种,你这是一种,还有一种写在js文件中,再包含进来。加载速度当然是第一种快。,对于修改一点也不麻烦,你的js代码很多吗?
    2.   隐藏域你干嘛要把它删掉啊,还有什么叫需要的时候啊,,你担心的太多了。
      

  2.   

    在html里面直接写js很影响页面的加载?
    是影响美观吧如果哪一天这个sex变量名称变了,你的代码当然要改。不管用什么你也得改代码啊
      

  3.   

    真是的, 把二行掉一下就行, 红色换成蓝色的, 这样$sex变量不存在, 或没了, js也不加载运行了,
    sex存在, js存, sex不存在, js不存在.
    <script type='text/javascript' >
    <{ if $sex == 'male'}>

    <{ if $sex == 'male'}>
    <script type='text/javascript' >
      var xxxx=123;
      do_some_thing(); //可能操作比较复杂
    <{ else }>
      var yyyy=456;
      do_other_thing(); //可能操作比较复杂

    <{ /if }>
    </script>

    </script>
    <{ /if }>
      

  4.   

    一句话, 判断sex变量是否存在, 存在则加载相关的有所的js.
      

  5.   

    本帖最后由 xuzuning 于 2011-08-12 08:47:50 编辑