【问题标题】:Call a function when a particular select option is chosen选择特定选择选项时调用函数
【发布时间】:2013-03-02 02:53:05
【问题描述】:

我有两个选择菜单请求

  1. 居民的楼号和
  2. 他们的公寓号码

如果访问者选择任一菜单的最后一项(两者都具有相同的value, textclass),我想调用一个函数来隐藏表单并显示一条消息。

该函数运行良好,因为它还通过一个非居民可能会点击的独立链接调用:(不住在这里?)

我不能让selectchange() 事件在选择最后一个选项时调用该函数。

这是我的选择代码的简短版本:

<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>

这是 jQuery:

$('#document-request select').change(function () {
    var theValue = $(this).child('option:selected').text();
    if ((theValue).contains('Live Here')) {
        residenceAlert();
    }
});

我也尝试通过作用于valueclass 来实现这一点。
我真的不需要 dontlivehere 类,它只是我试图找到解决方案的一部分。

可以在here找到示例页面

【问题讨论】:

    标签: jquery option onchange


    【解决方案1】:

    这行不应该:

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

    说:

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

    【讨论】:

      【解决方案2】:

      .child() 不是一个有效的 jQuery 函数,试试.find()

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

      我可能会使用这样的东西:

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

      【讨论】:

      • 在接受上一个答案时说得太早了。对 val() 的测试(这是我最初开始编写代码但无法开始工作的地方)起到了作用。现在只选择“我不住在这里”。触发功能,一切正常。现在到下一个问题...谢谢!
      【解决方案3】:

      这对我有用:

      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!");
         }
      });
      });
      

      【讨论】:

      • 您是如何解决Object has no method 'contains' 的问题的? fiddle 中的代码
      • 您链接的小提琴http://jsfiddle.net/vMAPn/ 不起作用。它甚至没有引用 jQuery。请在Chrome和IE中大部分时间默认使用浏览器开发者控制台(F12)来查看使用代码时的错误信息。
      • 你是对的,但是使用链接的 Jquery(在左侧面板中选择)它可以工作。我使用 firebug 来检查错误。
      • 我明白了,您使用的是 FireFox。 string.contains 在除 FireFox 之外的任何浏览器中均不受支持,这就是它适合您的原因。
      【解决方案4】:

      2 个问题:

      1) 子方法。

      2) 包含方法。

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

      【讨论】:

        【解决方案5】:

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

        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()


        【讨论】:

        • 其实我说得太早了。无论我从菜单中选择什么,此代码都会触发该功能。 @rusty jeans 的回答成功了。
        • @dashard:不用担心。使用您提供的示例 HTML 并修复您现有的代码,代码按预期工作,如 DEMO 中所示。当然,如果这不是你真正需要的,那是另一回事。主要是你把它排序了,很高兴你做到了:) 另外indexOf 不是 jQuery 而是标准 JavaScript,并返回一个整数,表示在theValue 字符串中找到指定的Live Here 值的位置。如果没有找到,则返回 -1。
        猜你喜欢
        • 2018-11-04
        • 1970-01-01
        • 2021-03-04
        • 2019-12-23
        • 2020-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多