2017-10-31 3 views
1

두 개의 드롭 다운 메뉴가 있습니다. 두 번째 드롭 다운 옵션은 첫 번째 드롭 다운 선택시 표시됩니다.사파리에서 옵션 표시가 작동하지 않습니다.

크롬에서는 완벽하지만 Safari/iPhone에서는 작동하지만 작동하지 않습니다. 수정본을 찾기 위해 웹에서 검색을하고 사파리에 대해 알게되면 옵션을 숨길 수 없습니다. 그래서 나는 해결책을 제시하려고 노력했다. 모든 브라우저에서이 문제를 해결하도록 코드를 수정하려면 어떻게해야합니까? 그래서 나는 그것이 "말을하는 것이 안전합니다 같아요

$("#search-tabs").on('click','li', function(e) { 
    $('.searchbox').hide().eq($(this).index()).show(); 
}); 

-

// get first dropdown and bind change event handler 
 
$('#p-city').change(function() { 
 
    // get optios of second dropdown and cache it 
 
    var $options = $('#p-nhb') 
 
    // update the dropdown value if necessary 
 
    .val('') 
 
    // get options 
 
    .find('option') 
 
    // show all of the initially 
 
    .show(); 
 

 
    // IF SAFARI 
 
    if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) { 
 
    var $options = $('#p-nhb').val('').find('option').append(); 
 
    } 
 

 
    // check current value is not 0 
 
    if (this.value != '0') 
 
    $options 
 
    // filter out options which is not corresponds to the first option 
 
    .not('[data-val="' + this.value + '"],[data-val=""]') 
 
    // hide them 
 
    .hide(); 
 

 
    // IF SAFARI 
 
    if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) { 
 
    $options.not('[data-val="' + this.value + '"],[data-val=""]').detach(); 
 
    } 
 
}) 
 
$('#p-city').trigger('change');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p> 
 
<select name="property_city" id="p-city"> 
 
    <option class="button" value="new-york-city" selected>New York City</option> 
 
    <option class="button" value="">All</option> 
 
    <option class="button" value="dallas-tx">Dallas, TX</option> 
 
    <option class="button" value="las-vegas">Las Vegas, NV</option> 
 
    <option class="button" value="los-angeles">Los Angeles, CA</option> 
 
    <option class="button" value="miami">Miami, FL</option> 
 
    <option class="button" value="new-york-city">New York City, NY</option> 
 
    <option class="button" value="san-francisco">San Francisco, CA</option> 
 
    <option class="button" value="seattle-wa">Seattle, WA</option> 
 
</select> 
 
</p> 
 

 
<p> 
 
<select name="property_nhb[]" id="p-nhb" multiple> 
 
    <option class="button">All</option> 
 
    <option data-val="los-angeles" value="beverly-hills" >Beverly Hills</option> 
 
    <option data-val="los-angeles" value="santa-monica" >Santa Monica</option> 
 
    <option data-val="miami" value="hialea" >Hialea</option> 
 
    <option data-val="miami" value="little-havana">Little Havana</option> 
 
    <option data-val="miami" value="north-miami">North Miami</option> 
 
    <option data-val="miami" value="south-beach">South Beach</option> 
 
    <option data-val="new-york-city" value="chelsea">Chelsea</option> 
 
    <option data-val="new-york-city" value="harlem">Harlem</option> 
 
    <option data-val="new-york-city" value="noho">NoHo</option> 
 
    <option data-val="new-york-city" value="soho">SoHo</option> 
 
</select> 
 
</p>

UPDATE는

또한 광산 사파리에서 나던 작품의 다른 기능을 발견했습니다 .hide "및".show "는 사파리에서 작동하지 않습니다. 낱장을 다시 쓰지 않아도되는 간단한 대안은 무엇입니까? 코드?

UPDATE 2

이 선택 옵션 .hide 위해에 작동 (.show = '블록')하지만 -

.css('display', 'none'); 

UPDATE 3

드롭 렌더링 전의 다운 -

<select name="property_city" class="form-control" id="p-city"> 
<?php 
$terms = get_terms("city-type", array('parent' => 0, 'orderby' => 'slug', 'hide_empty' => 0)); 
$count = count($terms); 
if ($count > 0 ){ 
echo "<option class='button' value='new-york-city'>New York City</option>"; 
echo "<option class='button' value=''>All</option>"; 
    foreach ($terms as $term) { 
     echo "<option class='button' value='" . $term->slug . "'>" . $term->name . "</option>"; 
    } 
} 
?> 
    </select> 

<label>Neighborhood</label> 
<?php $taxonomyName = "city-type"; 
$parent_terms = get_terms($taxonomyName, array('parent' => 0, 'orderby' => 'slug', 'hide_empty' => false)); 
echo "<select name='property_nhb[]' class='form-control' id='p-nhb' style='border-left: 1px solid #000 !important;' multiple>"; 
echo "<option class='button'>All</option>"; 
foreach ($parent_terms as $pterm) { 
    //Get the Child terms 
    $terms = get_terms($taxonomyName, array('parent' => $pterm->term_id, 'orderby' => 'slug', 'hide_empty' => false)); 
    foreach ($terms as $term) { 
     echo "<option data-val='" . $pterm->slug . "' value='" . $term->slug . "'>" . $term->name . "</option>"; 
    } 
} 
echo "</select>"; 
?> 
+0

HTTPS의 중복 : // 유래. com/questions/4398966/javascript- 크로스 브라우저를 사용하는 방법 선택 가능 -hi- 선택 - 옵션 – Kaiido

답변

1

에 대한 jsfiddle이고, 두 번째 선택 상자에 추가 할 다음 사용 옵션 목록을 캐시 할 수 있습니다. 여기

var select_clone = $('#p-nhb option'); 
 

 

 
$('#p-city') 
 
    .change(function() { 
 
    $('#p-nhb').html(select_clone.filter('[data-val="' + this.value + '"]')); 
 
    }) 
 
    .change();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p> 
 
<select name="property_city" id="p-city"> 
 
    <option class="button" value="new-york-city" selected>New York City</option> 
 
    <option class="button" value="">All</option> 
 
    <option class="button" value="dallas-tx">Dallas, TX</option> 
 
    <option class="button" value="las-vegas">Las Vegas, NV</option> 
 
    <option class="button" value="los-angeles">Los Angeles, CA</option> 
 
    <option class="button" value="miami">Miami, FL</option> 
 
    <option class="button" value="new-york-city">New York City, NY</option> 
 
    <option class="button" value="san-francisco">San Francisco, CA</option> 
 
    <option class="button" value="seattle-wa">Seattle, WA</option> 
 
</select> 
 
</p> 
 

 
<p> 
 
<select name="property_nhb[]" id="p-nhb" multiple> 
 
    <option class="button">All</option> 
 
    <option data-val="los-angeles" value="beverly-hills" >Beverly Hills</option> 
 
    <option data-val="los-angeles" value="santa-monica" >Santa Monica</option> 
 
    <option data-val="miami" value="hialea" >Hialea</option> 
 
    <option data-val="miami" value="little-havana">Little Havana</option> 
 
    <option data-val="miami" value="north-miami">North Miami</option> 
 
    <option data-val="miami" value="south-beach">South Beach</option> 
 
    <option data-val="new-york-city" value="chelsea">Chelsea</option> 
 
    <option data-val="new-york-city" value="harlem">Harlem</option> 
 
    <option data-val="new-york-city" value="noho">NoHo</option> 
 
    <option data-val="new-york-city" value="soho">SoHo</option> 
 
</select> 
 
</p>

이와 대체 솔루션 인해 중복 목록 버그에 대한 귀하의 의견에 선택 숨겨진 :

var select_clone = $('<select>') 
 
    .html($('#p-nhb option')) 
 
    .hide() 
 
    .insertAfter('#p-nhb'); 
 

 
$('#p-city') 
 
    .change(function() { 
 
    $('#p-nhb').html(select_clone.find('[data-val="' + this.value + '"]').clone()); 
 
    }) 
 
    .change();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p> 
 
<select name="property_city" id="p-city"> 
 
    <option class="button" value="new-york-city" selected>New York City</option> 
 
    <option class="button" value="">All</option> 
 
    <option class="button" value="dallas-tx">Dallas, TX</option> 
 
    <option class="button" value="las-vegas">Las Vegas, NV</option> 
 
    <option class="button" value="los-angeles">Los Angeles, CA</option> 
 
    <option class="button" value="miami">Miami, FL</option> 
 
    <option class="button" value="new-york-city">New York City, NY</option> 
 
    <option class="button" value="san-francisco">San Francisco, CA</option> 
 
    <option class="button" value="seattle-wa">Seattle, WA</option> 
 
</select> 
 
</p> 
 

 
<p> 
 
<select name="property_nhb[]" id="p-nhb" multiple> 
 
    <option class="button">All</option> 
 
    <option data-val="los-angeles" value="beverly-hills" >Beverly Hills</option> 
 
    <option data-val="los-angeles" value="santa-monica" >Santa Monica</option> 
 
    <option data-val="miami" value="hialea" >Hialea</option> 
 
    <option data-val="miami" value="little-havana">Little Havana</option> 
 
    <option data-val="miami" value="north-miami">North Miami</option> 
 
    <option data-val="miami" value="south-beach">South Beach</option> 
 
    <option data-val="new-york-city" value="chelsea">Chelsea</option> 
 
    <option data-val="new-york-city" value="harlem">Harlem</option> 
 
    <option data-val="new-york-city" value="noho">NoHo</option> 
 
    <option data-val="new-york-city" value="soho">SoHo</option> 
 
</select> 
 
</p>

+0

두 번째 드롭 다운 옵션을 두 번 보여 주지만 몇 가지 이유가 있습니다. 왜 그런 생각을 했니? – Rich

+0

@RichJ는 사파리 또는 모든 브라우저에서 발생합니다. Beacuse 데모가 효과적입니다. 사파리 버그 일 경우 해결할 생각이 하나 더 있습니다. – instead

+0

모든 브라우저 @instead – Rich

1

저는 숨겨진 숨겨진 선택에서 값을 업데이트하고 값을 기반으로 값을 채 웁니다. 이 간단한 크로스 브라우저 솔루션

<p> 
<select name="property_city" id="p-city"> 
    <option class="button" value="new-york-city" selected>New York City</option> 
    <option class="button" value="">All</option> 
    <option class="button" value="dallas-tx">Dallas, TX</option> 
    <option class="button" value="las-vegas">Las Vegas, NV</option> 
    <option class="button" value="los-angeles">Los Angeles, CA</option> 
    <option class="button" value="miami">Miami, FL</option> 
    <option class="button" value="new-york-city">New York City, NY</option> 
    <option class="button" value="san-francisco">San Francisco, CA</option> 
    <option class="button" value="seattle-wa">Seattle, WA</option> 
</select> 
</p> 

<p> 
<select name="property_nhb[]" id="p-nhb" multiple> 
</select> 
<select name="property_nhb[]" id="p-nhb-back" style="display:none" multiple> 
    <option class="button">All</option> 
    <option data-val="los-angeles" value="beverly-hills" >Beverly Hills</option> 
    <option data-val="los-angeles" value="santa-monica" >Santa Monica</option> 
    <option data-val="miami" value="hialea" >Hialea</option> 
    <option data-val="miami" value="little-havana">Little Havana</option> 
    <option data-val="miami" value="north-miami">North Miami</option> 
    <option data-val="miami" value="south-beach">South Beach</option> 
    <option data-val="new-york-city" value="chelsea">Chelsea</option> 
    <option data-val="new-york-city" value="harlem">Harlem</option> 
    <option data-val="new-york-city" value="noho">NoHo</option> 
    <option data-val="new-york-city" value="soho">SoHo</option> 
</select> 
</p> 

그리고 간단한 자바 스크립트가 될 것이기 때문에

// get first dropdown and bind change event handler 
$('#p-city').change(function() { 
    // get optios of second dropdown and cache it 
    var $options = $('#p-nhb') 
    // update the dropdown value if necessary 
    .val('') 
    // get options 
    .find('option') 
    // show all of the initially 
    .remove(); 


    $("#p-nhb").append($('#p-nhb-back option[data-val="' + this.value + '"],[data-val=""]')); 
}) 
$('#p-city').trigger('change'); 

그것은 나를 위해 잘 작동합니다. 여기에 뜻이 반드시 모든 브라우저에서 작동 해결 방법 같은

https://jsfiddle.net/cckhgw5g/

+0

그래도 문제는 내 드롭 다운 값이 동적이라는 것입니다. 그것은 워드 프레스 때문에 드롭 다운의 무리를 만들 수 없습니다. – Rich

+0

@ RichJ, 어쨌든 당신은 그 장소에서 그 가치들을 끌어낼 것입니까? 당신은 당신의 후원 선택을 대신 할 수 있습니다. 이전에 적용하려는 논리가 무엇이든간에. 지금 적용 가능해야 함 –

+0

명확하게하기 위해 제 질문을 업데이트했습니다. – Rich