1

任何人都可以帮我解决这个 if else 声明....

编码

<script>
$("#id_add_select").change(function(){
    if($("#id_add_select" == "2")){
        handler(1)
    } else {
        handler(2) 
    } 
}); 


function handler(situation){
var situation = situation;
    switch (situation)
    case 1:
          display: (".name")
          display: (".address")
    case 2:
          disable: (".age")
          disable: (".email")   
}
</script>

html编码

<html>
 ------

<select name="add_select" id="id_add_select">
        <option value="1">working</option>
        <option value="2">not working</option>
        <option value="3">retired</option>
</select>

 ------- 

我的情况是,如果我选择 2“不工作”,那么它将显示案例 1。否则将显示案例 2。基本的,但我无法弄清楚。太感谢了。

4

7 回答 7

3

这个不对:

if($("#id_add_select" == "2")){

您可能想要执行以下操作:

if($(this).val() == 2) {

您可以对代码进行更多优化,但这应该是正确的方向:

$("#id_add_select").change(function(){
    if($(this).val() == 2){
        handler(1)
    } else {
        handler(2) 
    } 
});

替代解决方案

IMO,在您的情况下,使用带有函数的地图对象比使用 switch 语句更干净。所以我可能会做类似的事情:

var actions = {
    1: function() {
        // first choice logic
    },
    2: function() {
        // second choice logic
    }
};

$("#id_add_select").change(function() {
    actions[this.value]();
});

演示:http: //jsfiddle.net/PurjS/

于 2012-10-15T10:51:00.380 回答
2

if($("#id_add_select" == "2")){=>if($("#id_add_select").val() == "2"){

于 2012-10-15T10:51:55.250 回答
2

首先你没有得到任何价值:

  <script>
  $("#id_add_select").change(function(){
     if($("#id_add_select").val()==2){
     handler(1);
   } else {
     handler(2);
    } 
  }); 
  </script>

不要忘记在 switch 循环中的每个 case 之后放置 break 语句。

于 2012-10-15T10:53:16.653 回答
1

弄清楚为什么某些事情不起作用

$("#id_add_select" == "2")

显然,您打算检查所选元素的值是否为2. 但是,不需要知道 jQuery 是如何工作的,很明显这是行不通的。

为此,您只需将语句分解为其基本部分。

我们有一个函数调用$(),我们通过传递一个参数来执行:"#id_add_select" == "2".

我们注意到,函数的参数完全独立于实际调用,这对所有函数调用都是如此。这意味着,比较的结果将被传递。因为比较的两个操作数都是文字,我们可以自己计算表达式并用一个常量替换它:"#id_add_select" == "2"显然不相等,因此结果将是false

我们得出结论,它与写作相同:$(false). 从这里,应该很明显,这段代码无法检查某个任意元素是否具有 value 2


除了其他答案,请注意

开关/外壳的工作原理

请注意,JavaScript 的switch/case语句具有贯穿行为。

这意味着,一旦一个case子句因为它的值与输入匹配而被执行x,它将执行它下面的所有代码,直到它遇到一个break;退出switch/case构造的语句。

在下面的示例中,执行printTo5Or8(1)不会让它在 之后终止console.log(1),相反,它将“通过”console.log(2);直到break;语句!

function printTo5Or8(x) {
    switch(x){
        case 1: 
            console.log(1); 
        case 2: 
            console.log(2);
        case 3: 
            console.log(3);
        case 4: 
            console.log(4);
        case 5: 
            console.log(5);
            break;
        case 6:
            console.log(6);
        case 7:
            console.log(7);
        case 8:
            console.log(8);

    }
}
printTo5Or8(1); // Prints 1 2 3 4 5
printTo5Or8(3); // Prints 3 4 5
printTo5Or8(6); // Prints 6 7 8
printTo5Or8(7); // Prints 7 8

无效的语法

switch/case语句需要一个块:{ statements; }跟随switch(expression)!你没有。


display: (".name")
display: (".address")

你可能的意思是display(".name");。目前,您拥有无用的标签。

冗余代码

function handler(situation){
    var situation = situation; // <-- Remove

形参列表(situation)已经声明了一个局部变量situation。没有必要声明它。

结论

我建议你花一些精力来学习 JavaScript 作为一门语言。了解 JavaScript 是如何工作的将帮助你推理你的代码和规则“不可能”的代码,这些代码永远不会工作。如果没有很好地掌握编程语言或在这种情况下是 JavaScript 的工作原理,编程会感觉像是将一些魔法咒语混合在一起,这些咒语有时只是碰巧做你想做的事,但往往会出错。

编程是一门精确的科学,而不是猜测和运气。

于 2012-10-15T11:13:18.697 回答
0

我认为这段代码更干净:

<script>
$("#id_add_select").change(function(){

if( $(this).val() == "2"))
    handler(1)
 else 
    handler(2) 

}); 


function handler(situation){

switch (situation){
case 1:
      display: (".name");
      display: (".address");
      break;
case 2:
      disable: (".age");
      disable: (".email");
       break;  
}
}
</script>
于 2012-10-15T10:56:45.967 回答
0

一段优化的爱情:

$("#id_add_select").change(handler);

var handler = function () {
    switch (this.value) {
        case 1:
            display(".name");
            display(".address");
            break;
        default:
            disable(".age");
            disable(".email");
            break;
    }
};

或者这样:

$("#id_add_select").change(function () {
    switch (this.value) {
        case 1:
            display(".name");
            display(".address");
            break;
        default:
            disable(".age");
            disable(".email");
            break;
    }
});

或者这样:

$("#id_add_select").change(function () {
    if (this.value === "1") {
        display(".name");
        display(".address");
    } else {
        disable(".age");
        disable(".email");
    }
});

也不要忘记你需要一个显示和一个禁用方法(但我猜你已经制作了它们,因为你的代码看起来像你有)

于 2012-10-15T11:00:56.663 回答
0
    <html>
    <head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>


    <script>
    $(document).ready(function(){
    $("p").click(function(){
    $(this).hide();
    });

    $("#id_add_select").change(function(){

        if($(this).val() == "2")
            handler(1)
         else 
            handler(2) 
    });  
    });
     function handler(situation)
    {
    switch (situation){
    case 1:
     alert(situation);
      break;
    case 2:
      alert(situation);
       break;  
    }
    }
</script>
</head>

<body>
<p>If you click on me, I will disappear.</p>
<select name="add_select" id="id_add_select">
        <option value="1">working</option>
        <option value="2">not working</option>
        <option value="3">retired</option>
</select>
</body>

</html>
于 2012-10-15T12:18:33.160 回答