1
    .data( "autocomplete" )._renderItem = function( ul, item ) {
    return $( "<li></li>" )
        .data( "item.autocomplete", item )
        if ( ( item.parent_term_id == "16" ) ) {
           .append( "<a>" + (item.child_term ? item.child_term : + "") + "</a>" )
        }
           .appendTo( ul );
    };

このコードは JqueryUi Autocomplete ウィジェットに属しています。「parent_term_id」が何かと等しい場合はオートコンプリートテキスト入力でアイテムを提案し、そうでない場合は何も提案しないようにします。(ワードプレスです)

しかし、そのifステートメントは機能していません。何か案が?

4

3 に答える 3

5
.data( "autocomplete" )
._renderItem = function( ul, item ) {
  var $li = $( "<li></li>" );

  $li.data( "item.autocomplete", item );

  if ( ( item.parent_term_id == "16" ) ) {
    $li.append( "<a>" + (item.child_term ? item.child_term : + "") + "</a>" );
  }
  return $li.appendTo( ul );
});

1 行で実行する必要がある場合(それを行う意味はありませんが):

.data( "autocomplete" )
._renderItem = function( ul, item ) {
  return $( "<li></li>" )
    .data( "item.autocomplete", item )
    .filter(function () {
      return item.parent_term_id == "16";
    })
    .append( "<a>" + (item.child_term ? item.child_term : + "") + "</a>" )
    .end()
    .appendTo( ul );
});
于 2012-07-15T16:02:57.097 に答える
4

jQuery コードで見られる無限の連鎖は、何かを行うための最良の方法であるとは限りません。

ここでは、変数を使用する方がよいでしょう:

.data( "autocomplete" )._renderItem = function( ul, item ) {
    var li = $( "<li></li>" );
    li.data( "item.autocomplete", item );
    if ( ( item.parent_term_id == "16" ) ) {
       li.append( "<a>" + (item.child_term ? item.child_term : + "") + "</a>" );
    }
    li.appendTo( ul );
    return li;
};

これらのいくつかを組み合わせることができifますが、 の場合、チェーン関数呼び出しを停止する必要があります。つまり、var を使用することを意味します。

于 2012-07-15T15:59:40.843 に答える
2

コードがどこで壊れているかを確認するために、いくつかのアラートを設定すると役立つ場合があります。また、if ブロックが呼び出されていないと思われる場合は、単純化するか、ロジックを逆にしてみてください。IE

alert("precondition");
if ( ( item.parent_term_id == "16" ) ) {
alert("in if block!");
   li.append( "<a>" + (item.child_term ? item.child_term : + "") + "</a>" );
}

簡素化

alert("precondition");
if ( ( item.parent_term_id) ) {
alert("in if block!");
   li.append( "<a>" + (item.child_term ? item.child_term : + "") + "</a>" );
}

逆論理

alert("precondition");
if ( ( item.parent_term_id != "16") ) {
alert("in if block!");
   li.append( "<a>" + (item.child_term ? item.child_term : + "") + "</a>" );
}
于 2012-07-15T16:03:28.377 に答える