当下拉列表的OnChange调用时,事件不会触发

时间:2012-01-27 20:44:23

标签: jquery html drop-down-menu

在我的下拉列表中,我进行了设置,以便onchange应该调用checkval并传入元素的id。我刚刚开始使用真正基本的登录,但是甚至无法显示警报。我做错了什么?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<script>
function checkval(id){
    if($('#' + id).val == "Other")
    {
        alert("You Selected Other");
        //other logic will go here
    }
}
</script>
</head>

<body>
<select name="items1[]" id="items1[]" onchange="checkval(id);">
    <option selected value="">Select One</option>
    <option value="one">One</option>
    <option value="Other">Other</option>
  </select>

<select name="items2[]" id="items2[]" onchange="checkval(id);">
    <option selected value="">Select One</option>
    <option value="one">One</option>
    <option value="Other">Other</option>
  </select>
</body>
</html>

5 个答案:

答案 0 :(得分:2)

编辑:似乎对于id items1 []失败了。所以改变了你的标记位..修复jsFiddle这里。

请参阅What characters are allowed in DOM IDs?

的链接

将您的标记更改为onchange="checkval(this.id);"

和脚本

function checkval(id){
    if($('#' + id).val() == "Other")
    {
        alert("You Selected Other");
        //other logic will go here
    }
}

答案 1 :(得分:2)

试试这个:

<select name="items1[]" id="items1[]" onchange="checkval(this.id);">

甚至更好,不引人注意地连接你的处理程序,

$(document).ready(function(){
    $(".items").change(function(){ 
        checkval(this.id);
    });
});

并删除onchange属性并添加一个类:

<select name="items1" id="items1" class="items">
    <option selected value="">Select One</option>
    <option value="one">One</option>
    <option value="Other">Other</option>
  </select>

<select name="items2" id="items2" class="items">
    <option selected value="">Select One</option>
    <option value="one">One</option>
    <option value="Other">Other</option>
  </select>

答案 2 :(得分:1)

val是一个函数,因此将其用作可以正常工作的函数val()

您可以将选定的值本身传递给chectVal方法。

更改标记。

<select name="items1[]" id="items1[]" onchange="checkval(this.value);">
<select name="items2[]" id="items2[]" onchange="checkval(this.value);">

JS

function checkval(value){
    if(value == "Other")
    {
        alert("You Selected Other");
        //other logic will go here
    }
}

答案 3 :(得分:0)

您应该使用括号调用val:

function checkval(id){
    if($('#' + id).val() == "Other")
    {
        alert("You Selected Other");
        //other logic will go here
    }
}

正如SKS指定的那样,onchange事件中也有错误,应该是this.id.但是,您可以将代码更改为更容易。

平变化:

<select name="items1[]" id="items1[]" onchange="checkval(this);">

你的功能:

function checkval(el){
    if($(el).val() == "Other")
    {
        alert("You Selected Other");
        //other logic will go here
    }
}

另外,你在控制台中有任何错误吗?

答案 4 :(得分:0)

$('#' + id).val是一个功能 该函数永远不会等于"Other"

您可能希望使用括号调用函数。