【问题标题】:Execute JavaScript function on a dynamic element (AJAX)在动态元素上执行 JavaScript 函数 (AJAX)
【发布时间】:2011-03-01 00:06:50
【问题描述】:

您好,我有以下功能:

... var model = $("#carModel");
.... model.change(validModel);

function validModel(){
     if(model.val() == 0){
            model.addClass("errorJS");
            return false;
            }else{
            model.removeClass("errorJS");
            return true;
            }  
    }

我从 AJAX 调用后生成的选择框中获取汽车型号 ID。我可以在 Firebug 控制台中获取它的值,但该函数不执行。即使很难,我也使用 model.livequery(validModel);

// 如果函数返回 false,errorJS 类会在元素周围放置一个红色边框

【问题讨论】:

    标签: javascript jquery ajax livequery


    【解决方案1】:

    在其他问题中,model 在函数上下文中没有任何意义。此外,使用此函数调用 change(validModel) 是没有意义的,因为它只返回一个真/假值。您需要执行以下操作:

    model.change(function() {
        var truefalse = validModel(this);
        //do something with truefalse
    });
    

    并将validModel的定义更改为

    var validModel = function(elem){
       if($(elem).val() == undefined){
           $(elem).addClass("errorJS");
           return false;
       } else {
           $(elem).removeClass("errorJS");
            return true;
       } 
    }
    

    【讨论】:

    • 另外,你对 if val() = undefined 的使用对我来说并不正确,但我不记得我的脑海中是否真的不正确或只是不常见。
    • 感谢您的帮助,对不起,我使用了 ..val()==0,我尝试了 undefined,因为当我输入 alert(..val()) 时它返回 undefined。
    • 我认为它适用于 if (!val())。另外,我稍微改变了我的答案以使其更有意义,希望对您有所帮助。
    • 再次感谢,但它仍然死于 AJAX 添加的新元素。
    • 没有看到有问题的 ajax 调用,或者更多你的代码,我真的帮不了你。你是什​​么意思,它“死于 AJAX 添加的新元素?”
    【解决方案2】:
    function getXMLHTTP() {
        var xmlhttp=false;  
        try{
        xmlhttp=new XMLHttpRequest();
        }
        catch(e){       
        try{            
        xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e){
        try{
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(e1){
        xmlhttp=false;
          }
         }
      }
       return xmlhttp;
    }
    
    function getModel(idCar) {      
        var strURL="http://localhost/root509dir/Includes/model.php?idCar="+idCar;
        var req = getXMLHTTP();
        if (req) {
              req.onreadystatechange = function() {
              if (req.readyState == 4) {
              if (req.status == 200) {document.getElementById('modelCont').innerHTML=req.responseText;
         } else {
           alert("There was a problem while using XMLHTTP:\n" + req.statusText);
           }
        }               
    }           
        req.open("GET", strURL, true);
        req.send(null);
        }       
    }
    

    model.php

    if(isset($_GET['idCar'])){
        $idCar = mysql_real_escape_string($_GET['idCar']);
    }
    $modelQR = mysql_query("SELECT *FROM model WHERE from_make = '$idCar'") or die(mysql_error());?>
    <?php echo htmlentities(PUB_AN_MOD); ?><em>*</em>
    <select name="carmodel" id="carmodel">
    <option value="0">----------------</option>
    <?php while($model = mysql_fetch_array($modelQR)){?>
    <option value="<?php echo htmlentities($model['id_model']);?>">
              <?php echo htmlentities($model['car_model']);?></option>
    <?php }?>
    </select>
    

    cars.php

    <?php
    $QRcars = mysql_query("SELECT *FROM car ORDER BY car_make") or die(mysql_error());
    if(mysql_num_rows($QRcars)>0){?>
    <select name="cars" id="cars" onchange="getModel(this.value);"><option value="0">-------------------</option>
    <?php while($cars = mysql_fetch_array($QRcars)){?>
    <option value="<?php echo htmlentities($cars['id_car']);?>">
    <?php echo htmlentities($cars['car_make']);?></option>
    <?php }?>
    </select>       
    <?php }?>
    <span id="modelCont">
    <?php echo htmlentities(PUB_AN_MOD); ?><em>*</em>
    <select name="model" id="model">
    <option value="0">---------</option>
    </select>
    </span>
    

    【讨论】:

      【解决方案3】:

      我明白了,问题出在 ready 事件上,我用它定义了函数,瞧。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-18
        • 2013-03-07
        • 1970-01-01
        • 2011-08-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多