0

私と同じような質問をたくさん見たことがあると思いますが、これまでのところ答えが見つかりませんでした。ユーザーがクリックしたときに完全に機能する、Web で見つかった依存ドロップダウンをいくつか採用しました。の上。問題は、デフォルト値を渡したいときに始まりました。最初のリストは値を取得しましたが、問題はありません。次に、2 番目のドロップダウンを生成するために、対応する Id に .click() イベントを追加しました。実際には、2 番目のドロップダウンと、選択された要素 (ドロップダウン入力関数から渡されます) が表示されます。ただし、ロードされると、実際のクリック数またはクリックを模倣するコードの数に関係なく、2 番目のドロップダウンはそのクリック機能を実行せず、選択のみを可能にしますが、3 番目のドロップダウンは生成しません。

何が間違っている可能性がありますか?

ページの本文の直前にあるメインの JS コードを次に示します。

var demo = {};

demo.globals = {
princ: 0,
princ2: 0,
princ3: 0
}

$(document).on('ready', function() {

$(document).on('click', '#lprinc', function() {
     var value = $(this).val();
      if (value==0){
            $('#lprinc2').html('<option value="">----</option>').attr('disabled', true);
            $('#lprinc2').css({ 'visibility': 'hidden'});
      } 
      else{ 
            $('#lprinc2').removeAttr('disabled');
            $('#lprinc2').css({ 'visibility': 'visible'});
            $('#lprinc3').html('<option value="">----</option>').attr('disabled', true);
            $('#lprinc3').css({ 'visibility': 'hidden'});                           
            if (value != demo.globals.princ) {
            demo.checkDropdown('princ', 'princ2', value, val2);
            demo.globals.princ = value;
            } 
    }
});

 if (val1!=''){
            $('#lprinc').trigger('click');
}

$(document).on('click','#lprinc2', function() {
     var value = $(this).val();
      if (value==0){
            $('#lprinc3').html('<option value="">----</option>').attr('disabled', true);
            $('#lprinc3').css({ 'visibility': 'hidden'});
      } 
      else{ 
            $('#lprinc3').removeAttr('disabled');
            $('#lprinc3').css({ 'visibility': 'visible'});       
            if (value != demo.globals.princ2) {
            demo.checkDropdown1('princ2', 'princ3', value, val3);
            demo.globals.princ2 = value;
            }
     }
 });

if (val2!=''){
         $('#lprinc2').trigger('click');
}    
if (val3!=''){
         $('#princ3').val(val3);
}     

}); 

demo.checkDropdown = function(dropDownName, nextDropDown, value, valorpass) {
jQuery.getJSON('/mod/update.php', { id : nextDropDown, value : value, val: valorpass}, function(data) {
    if (!data.error) {
        $('#lprinc2').html(data.list).removeAttr('disabled');
    } else {
        $('#lprinc2').html('<option value="">----</option>').attr('disabled', true);
        $('#lprinc2').css({ 'visibility': 'hidden'});
        $('#lprinc3').html('<option value="">----</option>').attr('disabled', true);
        $('#lprinc3').css({ 'visibility': 'hidden'});
    }
});    
$("select[name='" + nextDropDown + "']").html(dropDownHtml);

}

demo.checkDropdown1 = function(dropDownName, nextDropDown, value, valorpass) {
jQuery.getJSON('/mod/update.php', { id : nextDropDown, value : value, val: valorpass}, function(data) {
    if (!data.error) {
        $('#lprinc3').html(data.list).removeAttr('disabled');
    } else {
        $('#lprinc3').html('<option value="">----</option>').attr('disabled', true);
        $('#lprinc3').css({ 'visibility': 'hidden'});
    }
});     

$('#lprinc3').html(dropDownHtml);   

どんな助けでも本当に感謝しています。私は.one、.trigger()、.triggerHandler()、.click()を無駄にしようとしました。私は彼のものに夢中になっています...

追加: update.php:

if (!empty($_GET['value'])) {

$value = $_GET['value'];
$valor= $_GET['val'];

try {

    $objDb = new PDO('mysql:host=localhost;dbname=XXXXX', 'XXXXX', 'XXXXX');
    $objDb->exec('SET CHARACTER SET utf8');

    $sql = "SELECT * 
            FROM `categories`
            WHERE `master` = ?";

    $statement = $objDb->prepare($sql);
    $statement->execute(array($value));
    $list = $statement->fetchAll(PDO::FETCH_ASSOC);

    if (!empty($list)) {

        $out = array('<option value="0">Seleccione...</option>');

        foreach($list as $row) {
            $selstrg = "<option value='".$row['id']."' ";
            if ($row['id']==$valor){
                $selstrg = $selstrg." selected ='selected' ";   
            }       
            $selstrg = $selstrg.">".$row['name']."</option>";
            $out[] = $selstrg;          
        }

        echo json_encode(array('error' => false, 'list' => implode('', $out)));

    } else {
        echo json_encode(array('error' => true));
    }

} catch(PDOException $e) {
    echo json_encode(array('error' => true));
}

} else {
echo json_encode(array('error' => true));
}
4

1 に答える 1

1

更新された回答:

jQuery イベントを に更新する必要があると思いますon

次のようなコードを更新します。

$('#princ2').click(function() {

に:

$('#princ2').on('click', function() {

また、http://eduardoarria.comze.com/dropDownHtml is not definedの例では、次のコード行に問題があるというエラーが示されています。

$("select[name='" + nextDropDown + "']").html(dropDownHtml);

dropDownHtml宣言または割り当てられていないものを使用しようとしています。HTML を に設定しようとするコード行を削除しますdropDownHtml

于 2012-07-09T06:36:22.477 に答える