选择特定选择选项时调用函数

时间:2013-03-13 22:27:36

标签: jquery option onchange

我有两个选择菜单

  1. 居民的建筑物编号和
  2. 他们的公寓号码
  3. 如果访问者选择了任一菜单的最后一项(两者都具有相同的value, textclass),我想调用一个隐藏表单的函数并显示一个消息。

    该功能正常运行,因为它也是通过非居民可能点击的独立链接调用的:(不住在这里?)

    如果选择了最后一个选项,select的{​​{1}}事件会调用该函数,我无法工作。

    以下是我的选择代码的简要版本:

    change()

    这是jQuery:

    <form id="document-request" name="document-request" class="clearfix">
        <label>Your Full Name:
            <input type="text" name="fullname" value="" class="span12"
            required>
        </label>
        <label>Your Email:
            <input type="text" name="email" value="" class="span12 email"
            required>
        </label>
        <label for="building">Your Bldg &amp; Apt#:</label>
        <select name="building" class="span2" required>
            <optgroup label="Building">
                <option value="" name="building">--</option>
                <option value="1" name="building">1</option>
                <option value="2" name="building">2</option>
                <option value="3" name="building">3</option>
                <option value="4" name="building">4</option>
                <option value="5" name="building">5</option>
                <option value="6" name="building">6</option>
                <option value="7" name="building">7</option>
            </optgroup>
            <option value="nonresident" name="building" class="dontlivehere">I Don’t Live Here</option>
        </select>
    

    我还试图通过$('#document-request select').change(function () { var theValue = $(this).child('option:selected').text(); if ((theValue).contains('Live Here')) { residenceAlert(); } }); 以及value来实现这一目标。
    我真的不需要class课程,这只是我尝试寻找解决方案的一部分。

    可以找到正在进行的示例页面here

5 个答案:

答案 0 :(得分:4)

.child()不是有效的jQuery函数,请尝试.find()

var theValue = $(this).find('option:selected').text();

我可能只是使用这样的东西:

if ($(this).find('option:selected').val() === 'nonresident') {
    residenceAlert();
}

答案 1 :(得分:1)

浏览器调试器控制台将显示以下错误:

Uncaught TypeError: Object [object Object] has no method 'child' 

child()不是jQuery方法。

例如,将其更改为find()

child()替换为find()后,您可以获得的下一个错误是:

Uncaught TypeError: Object has no method 'contains' 

string.contains()仅受FireFox支持,使用indexOf()可能会更好,除非您当然不需要支持任何其他浏览器。

您的完整代码可能类似于:

$('select').change(function () {
    var theValue = $(this).find('option:selected').text();
    if (theValue.indexOf('Live Here')) {
        residenceAlert();
    }
});

DEMO - 使用.find()indexOf()


答案 2 :(得分:0)

不应该这一行:

if ((theValue).contains('Live Here')) {

说:

if ((theValue).contains("I Don't Live Here")) {

答案 3 :(得分:0)

这对我有用:

<强> HTML

<select id="building" name="building" class="span2" required>
    <optgroup label="Building">
    <option value="" name="building">--</option>
    <option value="1" name="building">1</option>
    <option value="2" name="building">2</option>
    <option value="3" name="building">3</option>
    <option value="4" name="building">4</option>
    <option value="5" name="building">5</option>
    <option value="6" name="building">6</option>
    <option value="7" name="building">7</option>
    </optgroup>  
    <option value="nonresident" name="building" class="dontlivehere">I Don’t Live Here</option>
  </select>

<强> jquery的:

$(document).ready(function(){
$('select#building').change(function() {
      var theValue = $('option:selected').text();
        console.log(theValue);
      if ((theValue).contains('Live Here')) {
      alert("it works!");
   }
});
});

答案 4 :(得分:0)

2个问题:

1)儿童方法。

2)包含方法。

var theValue = $(this).find('option:selected').text();
if( theValue.indexOf('Dont Live Here') >= 0){
    residenceAlert()
}