Наличие и mousedown/mouseup и dblclick в jQuery

Каждый раз, когда mousedown или mouseup обработчик присоединены к элементу, dblclick не может быть присоединен (не будет работать, если присоединено), хотя это кажется достаточно справедливым, там какой-либо способ восстановить dblclick функциональность, не переписывая его с нуля (вздохните...), Или я пропускаю что-то о распространении событий?

6
задан Favonius 29 January 2010 в 11:41
поделиться

2 ответа

Я лично люблю нормальное форматирование XML, поэтому я изменил его с момента его более читаемого, но именно так вы можете использовать:

$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<shop>
<products>
    <product>
        <id>1</id>
        <name>Cornetto</name>
        <price>1.20</price>
        <description>Traditional Cornetto</description>
    </product>
    <product>
        <id>2</id>
        <name>Smarties</name>
        <price>1.00</price>
        <description>Smarties Icecream</description>
    </product>
</products>
<stocks>
    <stock>
        <id>1</id>
        <amount>242</amount>
        <price>pounds</price>
    </stock>
    <stock>
        <id>2</id>
        <amount>11</amount>
        <price>pounds</price>
    </stock>
</stocks>
</shop>
XML;

Часть обработки:

$xml = new SimpleXMLElement($xmlstr);
echo 'single value: <br />';
echo $xml->products->product[0]->id; // get single value

echo '<br /><br />';

//Loop trough multiple products
echo 'multiple values: <br />';
foreach($xml->products->product as $product)
{
    echo $product->id.' - ';
    echo $product->name.' - ';
    echo $product->price.' - ';
    echo $product->description;
    echo '<br/>';
}
-121--4667665-

Ваш Mousedown и Mousisup не могут:

  1. DO E.STOPPROPAGATE и т. Д.
  2. Возврат false

, и он должен работать, если ваш код не имеет конфликта между ними методами

1
ответ дан 10 December 2019 в 02:47
поделиться

Несколько способов:

if (element.firstChild) {
    // It has at least one
}

или функция hasChildNodes () :

if (element.hasChildNodes()) {
    // It has at least one
}

или свойство length свойства childNodes :

if (element.childNodes.length > 0) { // Or just `if (element.childNodes.length)`
    // It has at least one
}

Если вы хотите знать только о дочерних элементах (в отличие от текстовых узлов, узлов атрибутов и т.д.) во всех современных браузерах (и IE8 - фактически, даже IE6) вы можете сделать это: (спасибо Флориан !)

if (element.children.length > 0) { // Or just `if (element.children.length)`
    // It has at least one element as a child
}

Это зависит от свойства children , которое не было определено в DOM1 , DOM2 , или DOM3 , но которое имеет почти универсальную поддержку. (Он работает в IE6 и вверх и Chrome, Firefox и Opera в по крайней мере еще в ноябре 2012 года, когда это было первоначально написано.) При поддержке старых мобильных устройств обязательно проверьте наличие поддержки.

Если вам не нужна IE8 и более ранняя поддержка, вы также можете сделать это:

if (element.firstElementChild) {
    // It has at least one element as a child
}

, которая полагается на firstElireChild . Как и child , он также не был определен в DOM1-3, но в отличие от children он не был добавлен в IE до IE9.

Если вы хотите придерживаться чего-то определенного в DOM1 (может быть, вам придется поддерживать действительно неясные браузеры), вы должны сделать больше работы:

var hasChildElements, child;
hasChildElements = false;
for (child = element.firstChild; child; child = child.nextSibling) {
    if (child.nodeType == 1) { // 1 == Element
        hasChildElements = true;
        break;
    }
}

Все это является частью DOM1 , и почти универсально поддерживается.

Было бы легко завершить это в функции, например:

function hasChildElement(elm) {
    var child, rv;

    if (elm.children) {
        // Supports `children`
        rv = elm.children.length !== 0;
    } else {
        // The hard way...
        rv = false;
        for (child = element.firstChild; !rv && child; child = child.nextSibling) {
            if (child.nodeType == 1) { // 1 == Element
                rv = true;
            }
        }
    }
    return rv;
}
-121--773134-

Можно проверить, имеет ли элемент дочерние узлы element.hasChildNodes () . Будьте осторожны в Mozilla это вернет true, если является пробел после тэга, так что вам нужно будет проверить тип тэга.

https://developer.mozilla.org/En/DOM/Node.hasChildNodes

-121--773136-

Это работает - поместите этот код в Firebug на этой самой странице, и вы увидите, как он работает (попробуйте дважды щелкнуть на тексте вашего вопроса):

($('.post-text')
    .mousedown(function () { console.log('down'); })
    .mouseup(function () { console.log('up'); })
    .dblclick(function () { console.log('dbclick'); }));

Нет Firebug ? Хватай, я подожду!

4
ответ дан 10 December 2019 в 02:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: